2016-12-03 1 views
0

Je recherche juste (récursive) pour tous les scripts shell dans un dossier:Comment rendre un script filtré par lots exécutable?

$ find * | ag "\.sh\b" 

Maintenant, comment puis-je les rendre exécutables, comme

$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b") 

Désolé pour cette étrange Python/pseudo-code Shell, Je ne connais pas d'autre moyen de le transmettre avec concision.

Répondre

0

Vérifiez Command Substitution.

Intégrer une commande dans backquotes pour en faire un argument pour une autre commande:

$ chmod +x `find * | ag "\.sh\b"` 
0

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.