web-dev-qa-db-fra.com

Comment utiliser la commande find pour trouver tous les fichiers avec les extensions de la liste?

J'ai besoin de trouver tous les fichiers image du répertoire (gif, png, jpg, jpeg).

find /path/to/ -name "*.jpg" > log

Comment modifier cette chaîne pour trouver non seulement les fichiers .jpg?

167
Kirzilla
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
170
Dennis Williamson
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'

marchera. Il pourrait y avoir un moyen plus élégant.

132
JoseK

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

Le -E vous évite d'avoir à échapper aux parens et aux tuyaux de votre regex.

24
tboyce12
find /path/to/ -type f -print0 | xargs -0 file | grep -i image

Ceci utilise la commande file pour essayer de reconnaître le type de fichier, quel que soit le nom de fichier (ou son extension).

Si /path/to ou un nom de fichier contient la chaîne image, l'élément ci-dessus peut renvoyer des résultats erronés. Dans ce cas, je suggère

cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
11
unutbu
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
6
ghostdog74

En complément de la réponse de @Dennis Williamson ci-dessus, si vous souhaitez que la même expression rationnelle ne respecte pas la casse des extensions de fichier, utilisez -iregex:

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
6
TCW

Sous Mac OS, utilisez

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"
1
7ynk3r
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
1
shrikant