findの結果を逆順に並べてxargsに渡す
Posted by mkamo on 2009年6月13日
findの結果を逆順に並べ替えてxargsに渡すコマンドラインのメモ.
以下のようなコマンドラインでfindの結果を逆順に並べ替えてxargsに渡せる.
> find /var/log/apache2 -name 'access.log.*.gz' | tac | xargs zcat
この例では,まず/var/log/apache2にあるaccess.log.*.gzファイルを探す.apacheのログは’*'の個所は数字で,結果は数字の小さい順に表示される.これをtacに渡すと行単位に逆順に並べ替えてくれる.最後にxargsにそれを渡すので,結果,access.log.*.gzにマッチするファイルを’*'の個所の数字が大きい順にzcatでつないだ文字列が標準出力に出力される.
なお,ファイル名に空白が入る可能性がある場合は,以下のようにxargsにヌル文字区切りの文字列を渡す必要がある.findとxargsの間にtacが入るため少々面倒.
> find /var/log/apache2 -name 'access.log.*.gz' | tac | tr '\n' '\0' | xargs -0 zcat