web-dev-qa-db-ja.com

ディレクトリ構造のみをtarする

ファイルを除いたディレクトリ構造をコピーしたい。すべてのファイルを無視し、ディレクトリのみを再帰的にコピーするオプションはtarにありますか?.

13
Balualways

Findを使用してディレクトリを取得し、それらをtarすることができます。

find .. -type d -print0 | xargs -0 tar cf dirstructure.tar --no-recursion

約10000を超えるディレクトリがある場合は、以下を使用してxargsの制限を回避します。

find . -type d -print0 | tar cf dirstructure.tar --no-recursion --null --files-from -
12
perreal

スペースやその他の特殊文字を含むディレクトリ名には、特別な注意が必要な場合があります。例えば:

$ mkdir -p "backup/My Documents/stuff"
$ find backup/ -type d | xargs tar cf directory-structure.tar --no-recursion
tar: backup/My: Cannot stat: No such file or directory
tar: Documents: Cannot stat: No such file or directory
tar: backup/My: Cannot stat: No such file or directory
tar: Documents/stuff: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

これらの「異常な」ディレクトリ名のケースを処理するためのいくつかのバリエーションを次に示します。

$ find backup/ -type d -print0 | xargs -0 tar cf directory-structure.tar --no-recursion

Findで-printを使用すると、ファイル名はnullで終了する文字列として出力されます。 - xargsは、引数を同じように解釈します。ターミネータとしてnullを使用すると、スペースと改行を含むファイル名でも正しく解釈されるようになります。

結果をfindからtarに直接パイプすることも可能です。

$ find backup/ -type d | tar cf directory-structure.tar -T - --no-recursion

-T-(または-files-from-)でtarを呼び出すと、stdinからファイル名が読み取られ、各ファイル名が改行で区切られていることが期待されます。

最大限の効果を得るには、これをnullで終了する文字列のオプションと組み合わせることができます。

$ find . -type d -print0 | tar cf directory-structure.tar --null --files-from - --no-recursion

これらのうち、この最後のバージョンは、通常とは異なるファイル名の両方をサポートし、(xargsとは異なり)システムのコマンドラインサイズによって本質的に制限されないため、最も堅牢であると考えています。 (見る xargs --show-limits

5
humbletim

AIXの場合:

tar cvfD some-tarball.tar `find /dir_to_start_from -type d -print` 
0
Prokhozhii
for i in `find . -type d`; do mkdir -p /tmp/tar_root/`echo $i|sed 's/\.\///'`; done
pushd /tmp/tar_root
tar cf tarfile.tar *
popd
# rm -fr /tmp/tar_root
0
mschr

開始したいフォルダーに移動し(そのため、find dotを使用します)、tarファイルを別の場所に保存します。そのままにしておくとエラーが発生したと思います。 rがcではないtar。 cfを使用すると、新しいファイルを作成し続け、ファイルサブディレクトリの最後のセットのみを取得できると思います。 tarrはtarファイルに追加されます。 --no-recursionは、検索によってファイルのリスト全体が既に提供されているため、再帰したくないためです。

見つける。 -type d | xargs tar rf /somewhereelse/whatever-dirsonly.tar--no-recursion

tar tvf /somewhereelse/whatever-dirsonly.tar |取得したものを確認するには、詳細をご覧ください。

0
Stan Towianski