findしてtarしたけどファイルが全部アーカイブされていない


問題点

このようなシェルコマンドを打っていました。

find . -name "*hoge.cif" | xargs tar -cf myfile.tar

すると、myfile.tarができたのでサーバーから落としてきてローカルで展開したところ、あれれ?ファイル全部入ってないぞとなりました。

find . -name "*hoge.cif" | wc -l

でファイル数を調べてみたらちゃんと8000近くあるのに、

tar -tf myfile.tar | wc -l

でアーカイブされたファイル数を数えてみても1503しか入っていない。
問題はどうやらxargsの挙動みたいでした。

findの結果をtarでアーカイブしたい

こちらのサイトを参考にしたところ、xargsは引数が多すぎるとバッファにためて実行を繰り返すみたいです。となるとずっとアーカイブファイルを上書きしてたってことか、、、。

解決策

上記サイトを参考に

find . -name "*hoge.cif" | tar -c -T - --null -f myfile.tar

とすれば解決!!