見つかったファイルのリストをxargs gzipにパイプし、もう一度Pigzにパイプします。

見つかったファイルのリストをxargs gzipにパイプし、もう一度Pigzにパイプします。

x日以降のファイルを見つけてgzipに変換する必要がありますが、 pigz を使って実行したいと思います。

今私はこれをゆっくりしています。

find /path/to/src -type f -mtime -90 | xargs tar -zcf archive.tar.gz

しかしpigz、はるかに高速なので、Pigzを使ってこのgzipを実行したいと思います。私はこれを試しましたが、うまくいきません。

find /path/to/src -type f -mtime -90 | xargs tar -zcf | pigz > archive.tar.gz

何をすべきかを推測していくつか試してみたので、エラーが返されます。

tar (child): /path/to/src: Cannot open: Is a directory
tar (child): Error is not recoverable: exiting now

最初の有効な行を取得してPigzにパイプするにはどうすればよいですか?

ベストアンサー1

サポートされているすべてのシェルでGNU tarを使用するプロセスの交換(例:bash、ksh、zsh):

tar cf archive.tar.gz -I pigz --null -T <(find /path/to/src  -type f -mtime -90 -print0)

これは、圧縮を実行したり、オプションとプロセスオーバーライドの出力pigzから、またはアーカイブに含めるファイルの(NULで区切られた)リストを取得するために使用されます。find ... -print0-T--files-from=FILE

または、POSIX機能(ashまたはダッシュ、環境変数セット/bin/shとして実行されるbashなど)のみを持つミニマリストシェルを使用している場合は、NULで区切られたファイル名のリストをGNU tarにパイプすることもできます。次のオプションは、tarにstdinからファイルのリストを読み込むように指示します。--posixset -o posixPOSIXLY_CORRECT--T

find /path/to/src  -type f -mtime -90 -print0 | tar cf archive.tar.gz -I pigz --null -T -

どちらも有効なファイル名、スペース、改行、およびシェルメタ文字を含むファイル名でも機能します。また、@Kusalanandaが自分の意見で述べたファイル名があまりにも多くの問題を回避します。

ちなみに、使用したいかもしれませんピクセル変えるpigz。もちろんxz圧縮(通常はgzipより優れていますが遅い)、pixzがtarに似た入力を検出すると、インデックスを追加して特定のファイルの抽出を高速化します。ちなみに、どちらも最も一般的なLinuxディストリビューション用にパッケージされているpixzのでxz-utils、インストールは簡単です。

おすすめ記事