Mac OSの場合はディレクトリ名及びファイル名に空白(0x20)を入れることができるため、find
及びxargs
の区切り文字をデフォルトの空白のままにしておくと、想定外のフォルダやファイルを処理してしまう可能性があります。
例えば、こういうディレクトリがあったとして
$ tree
.
├── a
├── a\ b
└── b
3 directories, 0 files
a b
ディレクトリを削除するために以下のコマンドを実行するとする
$ find . -name 'a b' | xargs rm -rf
a b
ディレクトリが削除され、a
ディレクトリとb
ディレクトリはそのままになってて欲しいが、結果は以下のようにa
ディレクトリとb
ディレクトリが削除されてしまう。
$ tree
.
└── a\ b
1 directory, 0 files
対策としては、タイトルにも書いてあるとおりfindコマンドの-print0及びxargsに-0をつけることで対処できます。
$ tree
.
├── a
├── a\ b
└── b
3 directories, 0 files
$ find . -name 'a b' -print0 | xargs -0 rm -rf
$ tree
.
├── a
└── b
2 directories, 0 files
まあディレクトリ名にスペースが入ってる時点でちょっとあれなんですけど。。。