Obtenir la liste des fichiers fron regex


Giuseppe Minardi:

J'essaie de faire un script bash qui extrait des informations à partir de documents pdf. le premier argument doit être une expression régulière ou le nom d'un fichier. Es:

$ autobib shrek2001.pdf
$ autobib *.pdf

Mon idée est de générer une liste de fichiers correspondant à l'expression régulière et d'en extraire des informations. Mon code en ce moment ressemble à ceci:

for article in $(ls $1);do
    pdfinfo $article
done

Mais ce faisant, la boucle s'arrête au premier fichier. Comment puis-je parcourir tous les fichiers correspondant à mon expression régulière?

Marque :

clpgr a tout à fait raison. Modifiez votre programme pour qu'il ressemble à ceci:

for article in "[email protected]" ;do
    pdfinfo $article
done

La raison pour laquelle votre programme ne fait que le premier fichier est que la commande shell est globulée. Autrement dit, lorsque vous exécutez la commande autobib *.pdf, vous émettez vraiment cette commande: autobib 1.pdf 2.pdf 3.pdf(eh bien, je crée des noms de fichiers car je ne sais pas ce qu'il y a dans le répertoire. Mais le fait est que votre programme aura 1 $ défini sur 1.pdf donc vous exécuterez ce code $( ls 1.pdf )qui ne retournerait que 1.pdf.

La vérité est, votre programme peut avoir travaillé ( en fonction des noms de fichiers dans le répertoire) si vous avez exécuté cette façon: autobib "*.pdf". Dans cet exemple, le "* .pdf" n'est pas englobé par le shell car il est cité. Maintenant, la variable $ 1 de votre programme aura la valeur *.pdf.

Cela dit, "[email protected]"c'est tellement mieux que $( ls $1 ). "[email protected]"conservera en fait des espaces dans les arguments.

Articles connexes