ディレクトリなどにスペースを含んでいるファイルがあるの場合に find と xargs をそのまま実行すると、スペースの前後で別々にxargsの引数として処理され、正常に実行されません。
そこで、スペースを区切り文字にするのではなく(null)を区切り文字にすると問題なく処理できます。
まずは、区切り文字をスペース以外のものにする必要があります。
と言っても大げさなことではなく、それぞれのコマンドにオプションが用意されています。
findコマンドでは、-print0オプションを有効にすると区切り文字がスペースから(null)に変更されます。
xargsコマンドは、-0オプションを指定されると(null)を区切り文字として扱います。
つまり両方を組み合わせて
のように find には、-print0 、xargsには、-0 オプションを与えるとうまく行きます。
以前の記事 [memo][Linux]chmod コマンドでファイルまたはディレクトリのみ属性を変更 の場合
ファイルの場合
ディレクトリの場合
とすると良いようです。
※ 筆者の場合はsamba共有しているマシンのフォルダにwordドキュメントを保存していたのですが、空白のあるファイルにぶち当たってなんでー?、となり、上記に気が付きました。
そこで、スペースを区切り文字にするのではなく(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ドキュメントを保存していたのですが、空白のあるファイルにぶち当たってなんでー?、となり、上記に気が付きました。