福岡のIT系の会社で働くエンジニアのブログです。

技術雑記

[linux][mac os x]スペースを含むファイル名がある場合にfindとxargsを使う方法

Twitter bookmark Facebook LINE Pocket Feedly RSS

ディレクトリなどにスペースを含んでいるファイルがあるの場合に find と xargs をそのまま実行すると、スペースの前後で別々にxargsの引数として処理され、正常に実行されません。
そこで、スペースを区切り文字にするのではなく(null)を区切り文字にすると問題なく処理できます。



まずは、区切り文字をスペース以外のものにする必要があります。
と言っても大げさなことではなく、それぞれのコマンドにオプションが用意されています。

findコマンドでは、-print0オプションを有効にすると区切り文字がスペースから(null)に変更されます。
xargsコマンドは、-0オプションを指定されると(null)を区切り文字として扱います。

つまり両方を組み合わせて
$ find . -type f -print0 | xargs -0 ls

のように find には、-print0 、xargsには、-0 オプションを与えるとうまく行きます。

以前の記事 [memo][Linux]chmod コマンドでファイルまたはディレクトリのみ属性を変更 の場合

ファイルの場合
find . -type f -print0 | xargs -0 chmod 644

ディレクトリの場合
find . -type d -print0 | xargs -0 chmod 755

とすると良いようです。

※ 筆者の場合はsamba共有しているマシンのフォルダにwordドキュメントを保存していたのですが、空白のあるファイルにぶち当たってなんでー?、となり、上記に気が付きました。

Twitter bookmark Facebook LINE Pocket Feedly RSS