ablog

不器用で落着きのない技術者のメモ

特定のファイル名のファイルを除いて tar で固める

jpg と gif 以外のファイルを固める。

$ find www -type f|perl -ne '/jpg|gif/ or print'|xargs tar rvf www.tar
tar: www/web_order/?R?s?[: Cannot stat: No such file or directory
tar: ?`: Cannot stat: No such file or directory
tar: orderform.htm: Cannot stat: No such file or directory
...
tar: Error exit delayed from previous errors.

こんなエラーがでる。ファイル名が変なのがあるみたい。

  • print0で締めているのは、ファイル名が変な場合でも適切に処理するため。
404 Blog Not Found:perl - the best friend of find(1)
$ find . -name \*~ -print0 | xargs -0 rm

こうすると、findの出力がヌル文字(0×00、別の表現をすると”\0″)で区切られて出力されます。また、xargsも引数がヌル文字で区切られているものとして処理を行います。その結果、空白文字を含んだファイル名も正常に処理できます。

http://openlab.dino.co.jp/2008/02/20/133431188.html

ということなので、デリミタをヌル文字にしてみたら、

$ find www -type f -print0|perl -0ne '/jpg|gif/ or print "$_\0"'|xargs -0 tar rvf www.tar

エラーが出なくなった。


[参考]
find + xargs + tar - umiyoshの日記
大量のファイルをバックアップ echo + xargs + tar - 猫山工房 跡地