findの結果をソートしてxargsに渡す
Posted by mkamo on 2009年6月13日
findの結果をソートしてxargsに渡すコマンドラインのメモ.
以下のようなコマンドラインでaccess.log.*.gzにマッチするファイルを「*」の個所の数字が大きい順にzcatでつないだ文字列が標準出力に出力される.
> find /var/log/apache2 -name 'access.log.*.gz' -print0 | \ sort -t '.' -k 3 -nrz | xargs -0 zcat
sortを使って,findの結果を「.」で区切った3番目の文字列を数値として比較し,降順に並べ替えてxargsに渡している.sortコマンドでは,以下のオプションを指定している.
- 「-t」オプションで区切り文字を「.」とする
- 「-k」オプションで3番目のフィールドをソート対象とする.3番目のフィールドとは「access.log.*.gz」を「.」で区切った3番目の「*」の個所のこと
- 「-n」 オプションで数値的にソートする .例えば1と2と10をソートするとき1<10<2の順ではなく1<2<10とソートする
- 「-r」オプションで降順(逆順)にソートする
- 「-z」オプションで各行の末尾を「\n」(ラインフィード)ではなく「\0」(ヌル文字)とする.findの「-print0」オプションとxargsの「-0」オプションのため