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?
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'
marchera. Il pourrait y avoir un moyen plus élégant.
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.
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/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
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
Sous Mac OS, utilisez
find -E packages -regex ".*\.(jpg|gif|png|jpeg)"
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"