Next: , Up: Multiple Files


3.3.2.1 安全でないファイル名の扱い

ファイル名には,引用符,バックスラッシュ,空白文字,そして改行でさえ含 めることが可能なので,処理のデフォルトモードで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