Je cherche quelque chose comme:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Ou une syntaxe similaire.
Peut également fonctionner sur d'autres commandes pour lesquelles vous souhaitez une confirmation individuelle.
la source
Je cherche quelque chose comme:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Ou une syntaxe similaire.
Peut également fonctionner sur d'autres commandes pour lesquelles vous souhaitez une confirmation individuelle.
Cela fait ce que vous cherchez:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Cela utilise find
plutôt que ls
parce que , généralement, l' analyse de la ls
sortie n'est pas fiable . Ce formulaire, en utilisant find
, cependant, fonctionnera avec les noms de fichiers même s'ils contiennent des sauts de ligne ou d'autres caractères difficiles.
Explication
find . -maxdepth 1 -type f -print0
Cela sélectionne les fichiers. Cela peut être personnalisé en utilisant l'une des nombreuses options de find. L'option print0
indique find
d'imprimer les noms de fichiers dans une liste séparée par des valeurs nulles. C'est le seul fiable à transmettre des listes de noms de fichiers.
xargs -L1 -p0 chmod +x
Cela prend la liste de noms de fichiers séparés par des valeurs nulles générée par find
et leur applique votre commande.
L' -L1
option indique xargs
de travailler sur un seul nom de fichier à la fois. L' -p
option indique xargs
de demander l'approbation avant de continuer. L' -0
option indique xargs
d'utiliser le caractère nul comme délimiteur entre les noms de fichiers.
[Je n'étais pas au courant de l' -p
option jusqu'à xargs
ce que @kwan le fasse remarquer.]
find
commande POSIX compatible en utilisant-exec printf '%s\0' {} +
. Ne pensez pas qu'il existe un moyen de rendre le tout compatible avec POSIX.find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Ainsi , il fonctionne avec le-maxdepth 1
avant-type f
, comme:find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.Vous pouvez utiliser
xargs
.par exemple:
Option
-p
: Demander à l'utilisateur s'il faut exécuter chaque ligne de commande et lire une ligne à partir du terminal. Exécutez la ligne de commande uniquement si la réponse commence par «y» ou «Y».la source
xargs -p
tellement votre utilisation que je vais la copier.ls
.touch "a very long file name
et appuyez sur Entrée. Voir la suite de la ligne et tapez simplement le devis de clôture et appuyez à nouveau sur Entrée. tadaa, nouvelle ligne dans le nom de fichier. Par paresse pour retaper un long nom de fichier.