一部のファイルの内容をアルファベット順(この場合は日付と反復も意味します)で抽出しようとしています。最初に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%
これらのファイルを解凍するときに、並べ替え順序を維持するにはどうすればよいですか?
find
で-print0
オプションを使用し、xargs
で-0
を使用しましたが、sort
に-z
を使用するのを忘れました。したがって、sort
には基本的に1行が表示されます(ファイル名に\n
が含まれている場合を除く)。 ls
で表示される出力は、おそらくls
が何らかの並べ替えを行っています。
find /opt/minecraft/wonders/logs/ -name '20*' -type f -mtime -3 -print0 |
sort -z | xargs -r0 gunzip -vc | grep /opt
(注:20*
はグロブであり、シェルでは引用符で囲む必要があるため、文字通りfind
に渡されます。/
をgrep
でエスケープする必要はありません。 、それが何をするかは指定されていません。一致する行を印刷するだけの場合は、正規表現の最後に.*
は必要ありません)