牛、豚、鶏、どれか一つ食べられなくなるとしたら?

【質問】
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行でできる良い方法があれば教えて下さい。

# そもそも【前提】が私の思い込みかもしれないので、
# 「違うよ」という指摘があればお願いします。

A 回答 (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

といった感じです。
    • good
    • 0
この回答へのお礼

やはりtarでは無理なんですね。
cpioは参考になりました。ありがとうございます。

お礼日時:2004/12/01 09:20

ディレクトリの構成だけを移したいのだったら


tarにこだわらずとも
ディレクトリ構成リストを作るスクリプトと
リストからmkdirするスクリプトを
作ればいいような気がするのですが。
    • good
    • 0
この回答へのお礼

ご提案いただいたやり方、私もよく使います。
(ディレクトリ、パーミッション、オーナー、グループを指定するディレクトリ構成リストを作って、そのリストからmkdir/chown/chmodするスクリプトを使っています)

作るだけが目的の場合はスクリプトでよいのですが、
バックアップ目的で(作成日時の記録保存)DAT保管し、別環境で「○月×日の状態のディレクトリ構成を戻し」て再現試験を行う、というような場合にtarを使うので、もうちょっとラクな方法はないかな、と考えています。

ご回答ありがとうございました。

お礼日時:2004/11/13 10:00

最近あまりUNIXのコマンドラインを扱っていないのでtarの仕様も良く覚えていないのですが...



 tarが個別のファイルを固められるとして、こんな感じ(雰囲気)でできないでしょうか?

tar cvfx `ls -F <directory> | grep -v "*\/"`

 分かるかた、フォローをお願いします。

# ls -Fの結果がどう評価されるかが心配です。

 今の方法でできるのでしたら、それをシェルスクリプトにしてしまえばいいような気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

tar cvf XXXXX

の XXXXX の部分でディレクトリを指定した場合に、ディレクトリの中身のファイルも一緒にアーカイブされてしまう、という仕様に対して、ディレクトリのみをアーカイブできないか、というのが今回模索している点です。

ですので、`ls -F <directory> | grep -v "*\/"`
の結果がディレクトリであれ、ファイルであれ、結果としてはファイルもアーカイブされてしまいます。

やはりtarの仕様上、無理なのでしょうね。

なお、cとxのオプションは一緒に扱えません。

お礼日時:2004/11/13 09:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報