xargsとgunzipを使用してソート順序を維持する方法

xargsとgunzipを使用してソート順序を維持する方法

以下を使用してプロセスを初めてテストしたときに、一部のファイルの内容をアルファベット順(この場合は日付と繰り返しを意味する)の順序で抽出しようとしていますls

$ find /opt/minecraft/wonders/logs/ -name 20* -type f -mtime -3 -print0 \
   | sort | xargs -r0 ls -l | awk -F' ' '{print $6 " " $7 " " $9}'

私は肯定的な結果を得ました:

Aug 18 /opt/minecraft/wonders/logs/2018-08-17-3.log.gz
Aug 18 /opt/minecraft/wonders/logs/2018-08-18-1.log.gz
Aug 19 /opt/minecraft/wonders/logs/2018-08-18-2.log.gz
Aug 19 /opt/minecraft/wonders/logs/2018-08-19-1.log.gz
Aug 20 /opt/minecraft/wonders/logs/2018-08-19-2.log.gz
Aug 20 /opt/minecraft/wonders/logs/2018-08-20-1.log.gz

ただし、実際にファイルを抽出すると、ソート順が失われます。

$ find /opt/minecraft/wonders/logs/ -name 20* -type f -mtime -3 -print0 \
   | sort | xargs -r0 gunzip -vc | grep "\/opt.*"`

/opt/minecraft/wonders/logs/2018-08-18-1.log.gz:     66.8%
/opt/minecraft/wonders/logs/2018-08-18-2.log.gz:     83.1%
/opt/minecraft/wonders/logs/2018-08-19-1.log.gz:     70.3%
/opt/minecraft/wonders/logs/2018-08-19-2.log.gz:     72.9%
/opt/minecraft/wonders/logs/2018-08-20-1.log.gz:     73.3%
/opt/minecraft/wonders/logs/2018-08-17-3.log.gz:     90.2%

これらのファイルを解凍するときにソート順をどのように維持できますか?

ベストアンサー1

-print0withfind-0withオプションを使用しましたが、forのxargs使用を忘れてしまったので、デフォルトで行が表示されます(ファイル名に含まれていない場合)。表示される出力は、いくつかのソートを実行している可能性があります。-zsortsort\nlsls

find /opt/minecraft/wonders/logs/ -name '20*' -type f -mtime -3 -print0 |
  sort -z | xargs -r0 gunzip -vc | grep /opt

(注:20*globであり、シェルについて引用する必要があるため、文字通りWireに渡されfindます。)/grep.*

おすすめ記事