あなたの場合はtar
再帰的にディレクトリ、それだけで、OSのから順番に使用していますreaddir
。
しかし、場合によっては、ファイルをソートしてtarで圧縮すると便利です。
ディレクトリをアルファベット順にソートするのに良い方法は何ですか?
この質問では、典型的なLinuxシステムのgnu-tarで問題ありません。
あなたの場合はtar
再帰的にディレクトリ、それだけで、OSのから順番に使用していますreaddir
。
しかし、場合によっては、ファイルをソートしてtarで圧縮すると便利です。
ディレクトリをアルファベット順にソートするのに良い方法は何ですか?
この質問では、典型的なLinuxシステムのgnu-tarで問題ありません。
回答:
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
。
--sort
tarバージョン1.28で導入されました。--preserve-order
この質問には関係ありません。
tar: Exiting with failure status due to previous errors
エラーが発生し続けています。@mhsmith
のzsh
代わりに:
pax -w dir
使用する:
pax -dw dir dir/**/*(D)
の最近のバージョンでも同じことができますbash -O globstar -O dotglob
:
pax -dw dir/**
またはFIGNORE='@(.|..)' ksh93 -o globstar
withの最近のバージョン :
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
s -printf0を使用してディレクトリと深度情報を指定し、並べ替えを行うことでトリックを行うことができますsort -n
が、これは、番号付きのファイルがディレクトリ内で並べ替えられる方法にも影響します。
上記の満足のいくものではない場合、あなたはおそらく基づいて小さなPythonプログラムを使用することができos.walk()
ますが、そのルートを行けば(extenionなどに基づいて、第1の深さ)、しかし、あなたにもドロップする可能性が完全に制御して、必要な順序を生成するcpio
と、書き出しますtar
Pythonのtarfile
モジュールを含むファイル。