GNU/Linux >> Linux の 問題 >  >> Linux

ソートされた順序でファイルを 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 も見たいと思うでしょう。 .


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 を含むファイル モジュール。


Linux
  1. ディレクトリ付きの猫ファイル?

  2. 特定のフォルダ内の特定の拡張子を持つすべてのファイルを削除するにはどうすればよいですか?

  3. Linuxでディレクトリをgzipで圧縮する方法

  1. Linuxでgocryptfsを使用してファイルを暗号化する方法

  2. Linuxで圧縮ファイルの内容を表示する方法

  3. 親ディレクトリを作成せずに wget でディレクトリをミラーリングするにはどうすればよいですか?

  1. chownコマンドでファイルとディレクトリの所有権を変更する方法

  2. ディレクトリ内のファイル サイズがゼロ (0) バイトのすべてのファイルを再帰的に検索する方法

  3. Linuxで特定の親ディレクトリを持つすべてのファイルを見つける方法は?