8
votes

Exécutez un script sur plusieurs fichiers à UNIX

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


0 commentaires

8 Réponses :


1
votes

in Bash: xxx


1 commentaires

Cela ne fonctionne que tant qu'il n'y a pas de noms de fichiers avec des espaces.



0
votes

fichiers = " mot-clé "

pour F dans "$ fichiers" faire perl myscript.pl $ f fait

de http://www.ycyberciiti.biz/faq/bash -loop-wver-file /


1 commentaires

Mais $ F tire le mot-clé, alors que je voudrais tout le nom de fichier (qui inclut le mot-clé).



4
votes
find . -path "\*filename\*" -exec perl myscript.pl {} \;
edit: escaped stars, didn't want the markup here

0 commentaires

4
votes
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

0 commentaires

1
votes

Un doublure:

$ pour fichier dans le nom de fichier1 fileName2 nom_file3; do perl myscript $ dossier; terminé

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:

$ pour fichier in * .txt * .csv; do perl myscript $ dossier; terminé


0 commentaires

2
votes

Et si vous avez des espaces dans vos noms de fichiers, utilisez l'ancien STANDBY

find . -maxdepth 1 -print0 | xargs -0 perl myscript.pl


0 commentaires

12
votes
find . -name "filename*" -exec perl myscript.pl '{}' \; 

0 commentaires

0
votes

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:

pour i in ** / *. WAV; boiteux $ i $ i: r.mp3

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é:

pour i in ** / *. txt; grep -h pourcentage $ i | queue -1


0 commentaires