• 締切
  • 暇なときにでも

tarでディレクトリのみをアーカイブしたい

  • 質問No.1081546
  • 閲覧数3204
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (3/3)

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

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

回答 (全3件)

  • 回答No.3

ベストアンサー率 0% (0/2)

お望みのことは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

といった感じです。
お礼コメント
gaktank

お礼率 100% (3/3)

やはりtarでは無理なんですね。
cpioは参考になりました。ありがとうございます。
投稿日時:2004/12/01 09:20
  • 回答No.2

ベストアンサー率 50% (3003/5914)

ディレクトリの構成だけを移したいのだったら
tarにこだわらずとも
ディレクトリ構成リストを作るスクリプトと
リストからmkdirするスクリプトを
作ればいいような気がするのですが。
お礼コメント
gaktank

お礼率 100% (3/3)

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

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

ご回答ありがとうございました。
投稿日時:2004/11/13 10:00
  • 回答No.1
最近あまりUNIXのコマンドラインを扱っていないのでtarの仕様も良く覚えていないのですが...

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

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

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

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

 今の方法でできるのでしたら、それをシェルスクリプトにしてしまえばいいような気がします。
お礼コメント
gaktank

お礼率 100% (3/3)

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

tar cvf XXXXX

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

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

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

なお、cとxのオプションは一緒に扱えません。
投稿日時:2004/11/13 09:38
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ