Je peux obtenir toutes les images jpg en utilisant:

find . -name "*.jpg" 

Mais comment puis-je ajouter des fichiers png aux résultats?

Commentaires

Réponse

Utilisez lindicateur -o entre différents paramètres.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) fonctionne comme un charme.

REMARQUE Il doit être un espace entre le crochet et son contenu ou cela ne fonctionnera pas.

Explication:

  • -type f – recherche uniquement des fichiers (pas des répertoires)
  • \( & \) – sont nécessaires pour que -type f sapplique à tous les arguments
  • -o – OU logique opérateur
  • -iname – comme -name, mais la correspondance est insensible à la casse

Commentaires

  • Avez-vous besoin des parenthèses. La commande fonctionne pour moi sans eux. Sont-ils nécessaires pour certains shells?
  • @miked La commande " fonctionnera " sans eux, oui, mais vous ' finissez par obtenir des hits sur des répertoires qui se terminent par .png ainsi que des fichiers qui se terminent par .jpg, ce qui nest pas exactement ce qui était prévu.
  • Merci de clarifier! type -f ne s’étend pas et s’applique aux deux expressions sans les parenthèses, donc, find ./ -type f -iname \*.jpg -o -type f -iname \*.png fonctionne également … bien que ' s deux caractères plus longs 🙂
  • Cela ' est une question de priorité des opérateurs. Tout comme a * b + c est différent de a * (b + c)
  • @jdhao Good catch, amendé.

Réponse

Vous pouvez combiner des critères avec -o comme suggéré par Shadur . Notez que -o a une priorité inférieure à la juxtaposition, vous pouvez donc avoir besoin de parenthèses.

find . -name "*.jpg" -o -name "*.png" find . -mtime -7 \( "*.jpg" -o -name "*.png" \) # all .jpg or .png images modified in the past week 

Sous Linux, vous pouvez utilisez -regex pour combiner les extensions de manière concise. La syntaxe dexpression régulière par défaut est Emacs ( expressions régulières de base plus quelques extensions telles que \| pour lalternance); il existe une option pour passer aux expressions régulières étendues .

find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)" 

Sur FreeBSD, NetBSD et OSX, vous pouvez utiliser -regex combiné avec -E pour les expressions régulières étendues.

find -E . -regex ".*\.(jpg|png)" 

Commentaires

  • Il ' est toujours préférable dutiliser -iname au lieu de -name – vous capturerez également image.JPG et image.PnG

Réponse

Cest plus correct:

find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$" 

Commentaires

  • Pourquoi dites-vous quil est " plus " correct?
  • @Kevin Je suppose parce que -iregex correspond à jpg ainsi quà JPG Jpg jpG et autres. Je pense que le $ nest ' nécessaire .
  • Cela fonctionne très bien sur MinGW .
  • Tout dabord, vous avez omis le dossier de recherche comme premier argument qui lancera une erreur. Deuxièmement, sur OSX, échapper les parenthèses ne fonctionnera pas, et cela devrait être utilisé à la place: find -E . -iregex '.*\.(jpg|png|gif)' comme indiqué dans la réponse de @sorin '.

Réponse

Pour être clair, la seule option qui fonctionne sur les versions Linux, Unix et macOS est:

find -E . -regex ".*\.(jpg|png)" 

Cest parce que la version OS X est un peu différente, mais cest important pour écrire des choses qui fonctionnent bien sur la plupart des plates-formes.

Commentaires

  • Lindicateur -E nest pas valide pour la recherche sur Ubuntu 14.04
  • Lindicateur -E nest pas valide sur MinGW soit (au moins la version / configuration sur laquelle je lai essayé (configuration par défaut pour une version particulière)).
  • Quelle partie de -type f \( -iname \*.png -o -iname \*.jpg\) ne fonctionne pas sous OSX?
  • Peut confirmer que -type f \( -iname \*.png -o -iname \*.jpg\) fonctionne sous OSX

Réponse

/\.(jpe?g|png|gif|bmp)$/i; 

Utilisez-le.

Commentaire s

  • Vous devrez peut-être expliquer cela un peu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *