a commencé à apprendre des scripts shell. J'ai un script Perl qui fonctionne sur un fichier. Comment j'écrirais un script shell pour exécuter le script perl un tas de fois sur tous les fichiers avec le mot-clé "nom de fichier" dedans?
SO en anglais, P>
for /filename/ in filenames perl myscript.pl completefilename
8 Réponses :
in Bash:
Cela ne fonctionne que tant qu'il n'y a pas de noms de fichiers avec des espaces.
fichiers = " mot-clé em>" p>
pour F dans "$ fichiers"
faire
perl myscript.pl $ f
fait p>
Mais $ F tire le mot-clé, alors que je voudrais tout le nom de fichier (qui inclut le mot-clé).
find . -path "\*filename\*" -exec perl myscript.pl {} \; edit: escaped stars, didn't want the markup here
for i in $(\ls -d filenames) do perl myscript.pl $i done The backslash in front of the 'ls' command is to temporarily disable any aliases.HTH
Un doublure: p>
au lieu de la liste des noms de fichiers séparés de l'espace Vous pouvez également utiliser des caractères génériques, par exemple: P>
$ pour fichier dans le nom de fichier1 fileName2 nom_file3; do perl myscript $ dossier; terminé
code> p>
$ pour fichier in * .txt * .csv; do perl myscript $ dossier; terminé
code> p>
Et si vous avez des espaces dans vos noms de fichiers, utilisez l'ancien STANDBY
find . -maxdepth 1 -print0 | xargs -0 perl myscript.pl
find . -name "filename*" -exec perl myscript.pl '{}' \;
J'utilise personnellement la coquille ZSH, ce qui vous donne un très bon moyen d'exécuter une commande récursive sur un ensemble de sous-répertoires. Il vous permet également de modifier le suffixe du fichier, qui est manifestement lors de l'utilisation de Lame pour créer des fichiers MP3 de fichiers .wav: p>
pour i in ** / *. WAV; boiteux $ i $ i: r.mp3 p>
Vous pouvez également tuyer la sortie d'une commande à une autre, que je fais quelque chose que j'utilise fréquemment lorsque je télécharge un certain nombre de fichiers BitTorrent et que je souhaite voir le pourcentage de chaque téléchargement terminé: P>
pour i in ** / *. txt; grep -h pourcentage $ i | queue -1 p>