Je peux obtenir toutes les images jpg
en utilisant:
find . -name "*.jpg"
Mais comment puis-je également ajouter des fichiers png
aux résultats?
Utilisez l'indicateur -o
Entre les différents paramètres.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
fonctionne comme un charme.
NOTE Il doit y avoir un espace entre le support et son contenu ou il a gagné ça marche pas.
Explication:
-type f
- recherche uniquement les fichiers (pas les répertoires)\(
& \)
- sont nécessaires pour que -type f
S'applique à tous les arguments-o
- logique OR opérateur-iname
- comme -name
, Mais la correspondance ne respecte pas la casseVous pouvez combiner des critères avec -o
as suggéré par Shadur . Notez que -o
a une priorité plus faible que la juxtaposition, vous devrez donc peut-être des 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 utiliser -regex
pour combiner les extensions de manière plus concise. La syntaxe regexp par défaut est Emacs ( regexps de base plus quelques extensions telles que \|
pour l'alternance); il y a une option pour passer à regexps étendus .
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 rationnelles étendues.
find -E . -regex '.*\.(jpg|png)'
C'est plus correct:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
Pour être clair, la seule option qui fonctionne sous Linux, Unix et macOS est:
find -E . -regex '.*\.(jpg|png)'
C'est parce que la version OS X est un peu différente, mais c'est important d'écrire des choses qui fonctionnent bien sur la plupart des plates-formes.