web-dev-qa-db-fra.com

Comment puis-je changer l'autorisation de fichier à un certain modèle de fichier pour les sous-dossiers de mon répertoire actuel?

En utilisant chmod, je fais chmod +x *.sh dans le répertoire courant, mais que faire si je veux modifier tous les fichiers, y compris les fichiers dans les sous-dossiers qui ont une extension de fichier sh?.

chmod +x -R * fonctionnera mais j'ai besoin de quelque chose de plus comme chmod +x -R *.sh

35
ivanceras

utilisez find:

find . -name "*.sh" -exec chmod +x {} \;
59
ennuikiller

Essayez d'utiliser la combinaison glorieuse de find avec xargs.

find . -iname \*.sh -print0 | xargs -r0 chmod +x

Le . est le répertoire dans lequel commencer, dans ce cas le répertoire de travail.

9
Orbling

Avec les versions modernes de find, vous bénéficiez des avantages d'une approche xargs qui évite plusieurs appels à la commande ( chmod). La commande n'est que légèrement différente.

find . -name "*.sh" -exec chmod +x {} +

Extrait de find docs sur Arch 2015.09.01 ( accentuation ajouté par moi):

-exec command {} +

Cette variante du -exec action exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est créée en ajoutant à la fin chaque nom de fichier sélectionné; le nombre total d'appels de la commande sera bien inférieur au nombre de fichiers correspondants . La ligne de commande est construite de la même manière que xargs construit ses lignes de commande. Une seule instance de {} est autorisé dans la commande. La commande est exécutée dans le répertoire de départ.

3
chappjc