findコマンドで検索してtarで固めようとすると全ファイル検出できない件
久しぶりにブログアップします(;´・ω・)
UNIXやLinuxでfindコマンドを使ってファイルを検索し、それを引数にして渡して処理を行うというのは割とよく実施するもの。
その時はxargsを使って引き渡すのが一般的なやり方かな。
# find /aaa/test -name "*.log" | xargs tar cvf /bbb/test.tar
なんてコマンドになるのかな?
ところが、これだと検索結果をすべて固めることができない。
実際に固めたtarファイルのアーカイブファイル数をカウントしてみたが、数が合わない。
# tar tvf /bbb/test.tar | wc -l
nn ←この数が実際のファイル数と合わない(´・ω・`)
なぜだろうと色々と調べたところ、どうやらxargsの引数の上限の問題らしい。
xargsで引き渡せる引数には上限があり、検索数が多ければその上限を超える可能性が高まり、その結果ファイルの数が合わなくなってしまう。
それを防ぐためには、以下のようにコマンドを入力すればよい。
# find /aaa/test -name "*.log" -print0 | tar -cvf -T - --null -f /bbb/test.tar
参考としたブログ記事がこちら。
実際にこの方法で圧縮前と後で確認を取るとファイル数は合致していました。
findコマンドのtipsとして挙げておきます。