187 votes

Parcourir en boucle tous les fichiers avec une extension spécifique

for i in $(ls);do
    if [ $i = '*.java' ];then
        echo "I do something with the file $i"
    fi
done

Je veux parcourir en boucle chaque fichier du dossier actuel et vérifier s'il correspond à une extension spécifique. Le code ci-dessus ne fonctionne pas, savez-vous pourquoi ?

3voto

user000001 Points 12050

Je suis d'accord avec les autres réponses concernant la façon correcte de boucler les fichiers. Cependant, le PO a demandé :

Le code ci-dessus ne fonctionne pas, savez-vous pourquoi ?

Oui !

Un excellent article [Quelle est la différence entre test, [ et [[ ?]?](http://mywiki.wooledge.org/BashFAQ/031) explique en détail que, parmi d'autres différences, vous ne pouvez pas utiliser expression matching ou pattern matching au sein de la test (qui est un raccourci pour [ )

Feature            new test \[\[    old test \[           Example

Pattern matching    = (or ==)    (not available)    \[\[ $name = a\* \]\] || echo "name does not start with an 'a': $name"

Regular Expression     =~        (not available)    \[\[ $(date) =~ ^Fri\\ ...\\ 13 \]\] && echo "It's Friday the 13th!"
matching

C'est donc la raison pour laquelle votre script échoue. Si le PO est intéressé par une réponse avec l'option [[ (qui a l'inconvénient de ne pas être supportée sur autant de plateformes que la syntaxe [ ), je serais heureux de modifier ma réponse pour l'inclure.

EDIT : Tout conseil sur la façon de formater les données dans la réponse sous forme de tableau serait utile !

3voto

f0nzie Points 391

J'ai trouvé cette solution très pratique. Elle utilise le -or option dans find :

find . -name \*.tex -or -name "*.png" -or -name "*.pdf"

Il trouvera les fichiers avec l'extension tex , png et pdf .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X