りょうかいの備忘録

ITインフラSE系を生業としております。IT系の記事感想を始め、趣味の旅行や写真を掲載していこうと思っています。

findコマンドで検索してtarで固めようとすると全ファイル検出できない件

久しぶりにブログアップします(;´・ω・)

 

UNIXLinuxで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として挙げておきます。