utiliser simplement find
« options de -exec
:
find -type f -name '*.sh' -exec chmod +x {} +
La commande chmod
est construit en annexant chaque fichier sélectionné nom à la fin: chmod +x f1.sh f2.sh ...
. Le {}
est remplacé par le nom de fichier actuel en cours de traitement. Voir man find
.
concernant votre commande en cours
Votre commande actuelle est principalement incorrecte parce que vous êtes de passage implicitement tous nœuds dans le répertoire courant à find
en raison du fait que l'astérisque (*
) est étendu à tous fichiers dans le répertoire en cours: find file1 file2 dir1 dir2 ...
. Évidemment, moyen pas très efficace pour trouver tous les fichiers avec l'extension .sh
.
Le deuxième problème est l'utilisation de l'outil ag
, puisque find
est très capable de rechercher des noms de fichiers par des modèles. Lire à propos de -name
, -path
, et -regex
options, par exemple. Afin de trouver tous les fichiers avec .sh
extension simplement passer '*.sh'
motif à l'option -name
("test", en termes de find
). Notez que le motif doit être échappé pour empêcher l'interprétation dans le contexte shell.