
【質問】
Solaris8 純正のtarコマンドで、ファイルを除いてディレクトリのみをアーカイブする良い方法を模索しています。
【背景】
ディレクトリ構成をtarで抽出し、別のマシンで解凍する(/export/homeなど)際に、配下のファイルサイズが大きく時間がかかるため、抽出の際にファイルを除外しておきたい
【前提】
tarでアーカイブする際、ディレクトリを指定すると配下のファイルも再帰的にアーカイブされてしまう。
【詳細】
例えば、以下のようなディレクトリ構造のとき、
AAA/
AAA/aaa/
AAA/aaa/hoge.c
BBB/
BBB/foo.txt
ディレクトリのみをtarアーカイブして、
AAA/
AAA/aaa/
BBB/
という内容のtarアーカイブを作成するとき、私は以下のようなやり方をしています。
A.全抽出→解凍→ファイル消し→再抽出
# tar cf - AAA BBB | (cd /tmp/work; tar xvf -)
# cd /tmp/work
# find . -type f -exec rm {} \;
# tar cvf /dev/rmt/0 AAA BBB
B.除外リスト作成→除外リスト指定で抽出
# find AAA BBB -type f > exclude-list
# tar cvfX /dev/rmt/0 exclude-list AAA BBB
どちらも結果的にはディレクトリのみ抽出できるので問題はないのですが、ちょっと手間がかかります。コマンドライン1行でできる良い方法があれば教えて下さい。
# そもそも【前提】が私の思い込みかもしれないので、
# 「違うよ」という指摘があればお願いします。
No.3ベストアンサー
- 回答日時:
お望みのことはtarではできませんがcpioを使えば簡単にできます。
例えば、以下のようなファイルとディレクトリがある場合
% find ./a
a
a/b
a/b/c
a/b/i.txt
a/b/j.txt
a/x.txt
a/y.txt
アーカイブの作成
% find a/ -type d | cpio -ov > a.cpio
a/
a/b
a/b/c
1 block
アーカイブの展開
% cpio -ivd < a.cpio
a
a/b
a/b/c
1 block
といった感じです。
No.2
- 回答日時:
ディレクトリの構成だけを移したいのだったら
tarにこだわらずとも
ディレクトリ構成リストを作るスクリプトと
リストからmkdirするスクリプトを
作ればいいような気がするのですが。
ご提案いただいたやり方、私もよく使います。
(ディレクトリ、パーミッション、オーナー、グループを指定するディレクトリ構成リストを作って、そのリストからmkdir/chown/chmodするスクリプトを使っています)
作るだけが目的の場合はスクリプトでよいのですが、
バックアップ目的で(作成日時の記録保存)DAT保管し、別環境で「○月×日の状態のディレクトリ構成を戻し」て再現試験を行う、というような場合にtarを使うので、もうちょっとラクな方法はないかな、と考えています。
ご回答ありがとうございました。
No.1
- 回答日時:
最近あまりUNIXのコマンドラインを扱っていないのでtarの仕様も良く覚えていないのですが...
tarが個別のファイルを固められるとして、こんな感じ(雰囲気)でできないでしょうか?
tar cvfx `ls -F <directory> | grep -v "*\/"`
分かるかた、フォローをお願いします。
# ls -Fの結果がどう評価されるかが心配です。
今の方法でできるのでしたら、それをシェルスクリプトにしてしまえばいいような気がします。
ご回答ありがとうございます。
tar cvf XXXXX
の XXXXX の部分でディレクトリを指定した場合に、ディレクトリの中身のファイルも一緒にアーカイブされてしまう、という仕様に対して、ディレクトリのみをアーカイブできないか、というのが今回模索している点です。
ですので、`ls -F <directory> | grep -v "*\/"`
の結果がディレクトリであれ、ファイルであれ、結果としてはファイルもアーカイブされてしまいます。
やはりtarの仕様上、無理なのでしょうね。
なお、cとxのオプションは一緒に扱えません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
拡張子.dどういう意味
-
ファイル名で / (スラッシュ...
-
make時に出てきたエラーメッセ...
-
tarでディレクトリのみをアーカ...
-
「ドット(.)」と「¥」の意味...
-
/home/lost+foundを消してしまった
-
"cp -a"と"cp -r"の違い
-
ftpのmgetコマンドの自分の格納...
-
linuxコマンド mkdirでディレ...
-
特定文字列を除外してcpする方法
-
LinuxでSGID設定する際、2775と...
-
MS-DOS(DOS窓ではない)で"~"(チ...
-
★Win2000のドライブ文字変更★
-
rc.dとかディレクトリやファイ...
-
特定のサイトにアクセスできま...
-
unzipコマンドでディレクトリな...
-
サイト登録審査サービス「ルッ...
-
/(スラッシュ)で区切ったフル...
-
古いファイルやディレクトリを...
-
cpコマンドで、属性維持したま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名で / (スラッシュ...
-
ftpのmgetコマンドの自分の格納...
-
7zを使うとフォルダの中身がす...
-
拡張子.dどういう意味
-
「照合パターンに合いません」...
-
"cp -a"と"cp -r"の違い
-
make時に出てきたエラーメッセ...
-
FTPコマンドのCDについて
-
linuxコマンド mkdirでディレ...
-
バッチファルの置き場所
-
scpによるデータ転送後、ディレ...
-
Linuxコマンドについて
-
シンボリックリンクについて
-
FTPでPUTできない原因は何?
-
zorin os lite 15 のデスクトッ...
-
ホームページのディレクトリを...
-
「ドット(.)」と「¥」の意味...
-
2TBのUSBメモリを2000円ほどで...
-
/(スラッシュ)で区切ったフル...
-
Minecraftにforgeを入れたら、...
おすすめ情報