web-dev-qa-db-ja.com

見つける 。 -type f -exec chmod 644 {};

なぜこれが機能しないのですか?すべてのファイルを644に、すべての-dを755に変更しようとしています:

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

i get:find: `-exec 'の引数がありませんありがとう

41
user1920187

Xargsへのパイピングは、findの内部で実行できる汚い方法です。

find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

次のような他のオプションを使用してさらに制御できます。

find . -type d -user harry -exec chown daisy {} \;

Findを使用すると非常にクールなことができ、非常に危険なこともできます。 「man find」をご覧ください。長いですが、一読する価値があります。そして、いつも覚えているように:

  • あなたがrootであれば、成功します。
  • ルート(/)にいる場合は、悪い一日を過ごすことになります。
  • / path/to/directoryを使用すると、実行したい場所を明確に定義できるため、物事がずっと安全になります。
116
Phil

良い代替案はこれです:

find . -type f | xargs chmod -v 644

およびディレクトリの場合:

find . -type d | xargs chmod -v 755

より明確にするために:

find . -type f | xargs -I{} chmod -v 644 {}
15
Seth Malaki

私はこれを頻繁に必要とするので、~/.bashrcファイル:

chmodf() {
        find $2 -type f -exec chmod $1 {} \;
}
chmodd() {
        find $2 -type d -exec chmod $1 {} \;
}

これで、これらのショートカットを使用できます。

chmodd 0775 .
chmodf 0664 .
5