it-swarm.com.de

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

warum funktioniert das nicht? Ich versuche, alle Dateien auf 644 und alle -d auf 755 zu ändern:

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

ich bekomme: find: fehlendes argument an `-exec ' danke

41
user1920187

Das Piping zu xargs ist eine schmutzige Methode, die innerhalb von find ausgeführt werden kann.

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

Mit anderen Optionen können Sie noch mehr steuern:

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

Sie können mit find einige sehr coole Dinge tun und Sie können auch einige sehr gefährliche Dinge tun. Schauen Sie sich "man find" an, es ist lang, aber eine schnelle Lektüre wert. Und wie immer daran denken:

  • Wenn Sie root sind, wird es gelingen.
  • Wenn Sie in root (/) sind, werden Sie einen schlechten Tag haben.
  • Die Verwendung von/path/to/directory kann die Sicherheit erheblich erhöhen, da Sie klar definieren, wo das Programm ausgeführt werden soll.
116
Phil

Eine gute Alternative ist dies:

find . -type f | xargs chmod -v 644

und für Verzeichnisse:

find . -type d | xargs chmod -v 755

und um genauer zu sein:

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

Ich brauche das so oft, dass ich in meiner ~/.bashrc - Datei eine Funktion erstellt habe:

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

Jetzt kann ich diese Verknüpfungen verwenden:

chmodd 0775 .
chmodf 0664 .
5