ファイル名には,引用符,バックスラッシュ,空白文字,そして改行でさえ含
めることが可能なので,処理のデフォルトモードでxargsを使用しなが
らそれを処理することは安全ではありません.しかし,ほとんどのファイル名
は空白を含まないので,この問題は滅多に発生しません.安全なファイル名だ
と知っているファイルを検索している場合のみ,それについて悩む必要はあり
ません.
応用する際は,名前に特殊文字を含んでいるため,xargsファイルをう
まく処理できない場合も多く,失われるデータもあります.この問題の重要性
は,データの重要性に依存し,それを訂正するためにはできるだけ速く,失っ
たものに気づくかに依存します.しかし,ここに,空白で分離した名前の使用
で引き起こされる究極の例があります.以下のコマンドが,毎日cronで
実行される場合,あらゆるユーザは任意のファイルを削除することが可能です.
find / -name '#*' -atime +7 -print | xargs rm
例えば,以下のようなことが可能でしょう.
eg$ echo > '#
vmunix'
/を現在のディレクトリとして,xargsを実行してしまった場合,
そして,cronは/vmunixを削除するでしょう.
他のファイルを削除するために,例えば/u/joeuser/.planは,以下のよ うにすることで可能でしょう.
eg$ mkdir '#
'
eg$ cd '#
'
eg$ mkdir u u/joeuser u/joeuser/.plan'
'
eg$ echo > u/joeuser/.plan'
/#foo'
eg$ cd ..
eg$ find . -name '#*' -print | xargs echo
./# ./# /u/joeuser/.plan /#foo