すべてのディレクトリとファイルがアルファベット順に処理されるtarファイルを作成したい。これは、タール化されているディレクトリ階層全体に対するものであるため、最初のディレクトリをアルファベット順に処理し、次にその中のサブディレクトリをアルファベット順に処理することから開始します。
私は認めます、これは半分の目新しさ、半分の最適化です。これを行う簡単な方法がないとは信じられません。私は何かが欠けているに違いない。
すべてのディレクトリとファイルがアルファベット順に処理されるtarファイルを作成したい。これは、タール化されているディレクトリ階層全体に対するものであるため、最初のディレクトリをアルファベット順に処理し、次にその中のサブディレクトリをアルファベット順に処理することから開始します。
私は認めます、これは半分の目新しさ、半分の最適化です。これを行う簡単な方法がないとは信じられません。私は何かが欠けているに違いない。
回答:
Slartibartfastは正しい軌道に乗っていますが、tarのデフォルトの動作はディレクトリに降りることです。そのため、生成されたtarファイルに含まれる同じファイルの複数のコピーを取得できます。あなたは実行して確認することができます
tar tf file.tar | sort
回避策はタールに--no-再帰オプションを含めることです。また、 -print0
オプションを使用して検索してからオプションを使用して、奇妙なファイル名で送信できるようにする必要があります--null
。最終結果は次のようになります。
find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -
を使用して、tarファイルの順序を確認できますtar tsf tarfile.tar
。改行が埋め込まれたファイル名に遭遇することがわかっていない限り、おそらく-print0、-z、および--nullオプションは必要ないでしょうが、私は試したことはありません。
ファイルが抽出されるとき、ファイルシステムはいずれにしても順序を保持しないため、tarファイル内のファイルの順序は実際には重要ではありません。
これにはスイッチはありませんが、本当に必要な場合は、ソートされた順序でファイル名のリストをtarに提供できます。これにより、指定した順序でtarファイルが作成されます。
% tar cf tarfile tmp/diff.txt src/hellow.c junkimage.IMG barry/thegroup
% tar tf tarfile
tmp/diff.txt
src/hellow.c
junkimage.IMG
barry/thegroup
tar tf tarfile | sort
find . -depth -print0 | sort -z | pax -wvd0 > file.tar
PaxはcpioとtarのPOSIXの後継の一種であり、両方の長所を融合しています。デフォルトでtarアーカイブ(ustar)を書き込みます。また、メディアの自動スパンニングとプロンプト表示を行い、完了時に要約を出力します。
@CharlieHerronの答えに代わるものとして、コンテンツ(ファイル、シンボリックリンク)とフォルダーメタデータ(たとえば、フォルダーのアクセス許可、mtimeなど)のみを保持することに関心がある場合、find
の出力からフォルダーをフィルターすることができます。
find paths -not -type d -print 0 | sort -z | tar cf tarfile.tar --null -T -