web-dev-qa-db-fra.com

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

pourquoi cela ne fonctionne-t-il pas, j'essaie de modifier tous les fichiers en 644 et tous -d en 755:

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

i get: find: argument manquant pour `-exec ' merci

41
user1920187

Tuyauterie vers xargs est une mauvaise façon de faire ce qui peut être fait dans find.

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

Vous pouvez être encore plus contrôlant avec d'autres options, telles que:

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

Vous pouvez faire des choses très cool avec find et vous pouvez faire des choses très dangereuses aussi. Jetez un coup d'œil à "trouver un homme", c'est long mais mérite une lecture rapide. Et, comme toujours, souvenez-vous:

  • Si vous êtes root, cela réussira.
  • Si vous êtes à la racine (/) vous allez passer une mauvaise journée.
  • Utiliser/path/to/directory peut rendre les choses beaucoup plus sûres, car vous définissez clairement où vous voulez que la recherche soit exécutée.
116
Phil

Une bonne alternative est la suivante:

find . -type f | xargs chmod -v 644

et pour les annuaires:

find . -type d | xargs chmod -v 755

et pour être plus explicite:

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

J'ai besoin de cela si souvent que j'ai créé une fonction dans mon ~/.bashrc fichier:

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

Maintenant, je peux utiliser ces raccourcis:

chmodd 0775 .
chmodf 0664 .
5
Fabian Schmengler