ソートされた順序でファイルをタール化​​する方法は?


10

あなたの場合はtar再帰的にディレクトリ、それだけで、OSのから順番に使用していますreaddir

しかし、場合によっては、ファイルをソートしてtarで圧縮すると便利です。

ディレクトリをアルファベット順にソートするのに良い方法は何ですか?


この質問では、典型的なLinuxシステムのgnu-tarで問題ありません。


以下の可能性のある重複し、以下のリンクをチェック unix.stackexchange.com/questions/120143/... superuser.com/questions/172367/...
Jaymin Dabhi

私はこれを見ましたが、順序がどのように設定されているかを尋ねるのではなく、並べ替えたいと思います。
ideasman42

ディレクトリツリーを名前でソートする方法については、unix.stackexchange.com / a / 67018も参照してください。
ステファンChazelas

回答:


17

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


8
--sorttarバージョン1.28で導入されました。--preserve-orderこの質問には関係ありません。
mhsmith

tar: Exiting with failure status due to previous errorsエラーが発生し続けています。@mhsmith
alper

3

zsh代わりに:

pax -w dir

使用する:

pax -dw dir dir/**/*(D)

の最近のバージョンでも同じことができますbash -O globstar -O dotglob

pax -dw dir/**

またはFIGNORE='@(.|..)' ksh93 -o globstarwithの最近のバージョン :

pax -dw dir dir/**

paxtarファイルを作成するための標準コマンドです。出力はstdoutに送られます。シェルグロブは名前でソートされます。

あなたがした場合はArgのリストが長すぎるエラーを、あなたがに変更できます。

printf '%s\0' dir dir/**/*(D) | pax -0dw

(ただし、すべてのpax実装がサポートして-0いるわけではありません)。


2

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

ただし、ファイル名の間にサブディレクトリが配置されるという欠点があります。finds -printf0を使用してディレクトリと深度情報を指定し、並べ替えを行うことでトリックを行うことができますsort -nが、これは、番号付きのファイルがディレクトリ内で並べ替えられる方法にも影響します。

上記の満足のいくものではない場合、あなたはおそらく基づいて小さなPythonプログラムを使用することができos.walk()ますが、そのルートを行けば(extenionなどに基づいて、第1の深さ)、しかし、あなたにもドロップする可能性が完全に制御して、必要な順序を生成するcpioと、書き出しますtarPythonのtarfileモジュールを含むファイル。


1
--nullは、-Tがnullで終了する文字列を取ることを指定します。
psusi 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.