GNU tar
の場合 :
--sort=ORDER
Specify the directory sorting order when reading directories.
ORDER may be one of the following:
`none'
No directory sorting is performed. This is the default.
`name'
Sort the directory entries on name. The operating system may
deliver directory entries in a more or less random order, and
sorting them makes archive creation reproducible.
`inode'
Sort the directory entries on inode number. Sorting
directories on inode number may reduce the amount of disk
seek operations when creating an archive for some file
systems.
おそらく --preserve-order
も見たいと思うでしょう。 .
zsh
で 、代わりに:
pax -w dir
用途:
pax -dw dir dir/**/*(D)
bash -O globstar -O dotglob
の最近のバージョンでも同じことができます と:
pax -dw dir/**
または FIGNORE='@(.|..)' ksh93 -o globstar
の最近のバージョン と:
pax -dw dir dir/**
pax
tar
にする標準コマンドです ファイル。出力は stdout に送られます。シェル グロブは名前でソートされます。
Arg リストが長すぎる場合 エラー、次のように変更できます:
printf '%s\0' dir dir/**/*(D) | pax -0dw
(すべての pax
ではありません 実装は -0
をサポートします
tar
それ自体はこれを行うことができないため、正しい順序のリストから作成する必要があります。原則として、 tar
を使用できます の -T
オプションですが、そのリスト内のファイル名が NUL で終了するように指定する方法はありません。そのため、ファイル名に改行が含まれている場合 (これは許可されています)、これは壊れます。
より良いオプションは cpio
を使用することです ファイル名の NUL 終了リストを受け入れ、tar ファイルを生成できるようにファイルを生成します。
tar
の場合 コマンドは次のようになります:
tar cvf /somedir/all.tar .
次に、これを名前でソートするには、次のことを行う必要があります (GNU find と cpio を想定):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
ただし、ファイル名の間にサブディレクトリが配置されるという欠点があります。 find
でトリックを実行できます ■ -printf0 ディレクトリと深度情報を指定し、sort -n
でソートします しかし、それはディレクトリ内で番号付きのファイルがどのようにソートされるかにも影響します。
上記で満足できない場合は、おそらく os.walk()
に基づく小さな python プログラムを使用できます。 完全に制御して必要な順序を生成します (深さ優先、拡張子などに基づく) が、そのルートに行く場合は cpio
を削除することもできます tar
を書き出す python の tarfile
を含むファイル モジュール。