以下を使用してプロセスを初めてテストしたときに、一部のファイルの内容をアルファベット順(この場合は日付と繰り返しを意味する)の順序で抽出しようとしています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
-print0
withfind
と-0
withオプションを使用しましたが、forのxargs
使用を忘れてしまったので、デフォルトで行が表示されます(ファイル名に含まれていない場合)。表示される出力は、いくつかのソートを実行している可能性があります。-z
sort
sort
\n
ls
ls
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
.*