5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

mac環境でfindとxargsを使う時は-print0と-0を必ずつける(戒め

Last updated at Posted at 2019-12-30

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

まあディレクトリ名にスペースが入ってる時点でちょっとあれなんですけど。。。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?