web-dev-qa-db-ja.com

ディレクトリではなくファイルのアクセス許可のみを変更するコマンド

私は次のコマンドを持っています

find . -type f -print0 | xargs -0 chmod 644 

ファイル名にスペースが含まれていなければ、。のすべてのファイルのアクセス許可が644に正常に変更されます。ただし、一般的には機能しません。

例えば

touch "hullo world"
chmod 777 "hullo*"
find . -type f -print0 | xargs -0 chmod 644 

返却値

/bin/chmod: cannot access `./hello': No such file or directory
/bin/chmod: cannot access `world': No such file or directory

スペースが埋め込まれたファイルを処理できるようにコマンドを変更する方法はありますか?

アドバイスありがとうございます。

3
Leo Simon

xargsなし

find . -type f -exec chmod 644 {} \;

またはxargs

find . -type f -print0 | xargs -0 -I {} chmod 644 {}

使用されるxargsスイッチ

  • -0空白または文字(改行を含む)がある場合、多くのコマンドは機能しません。このオプションは、空白のあるファイル名を処理します。

  • -I initial-arguments内のreplace-strの出現を標準入力から読み取った名前に置き換えます。また、引用符で囲まれていない空白は入力項目を終了しません。代わりに、区切り文字は改行文字です。

here からの説明

6
A.B.