Az összes jpg
képet megkaphatom a következő használatával:
find . -name "*.jpg"
De hogyan adhatok png
fájlokat az eredményekhez is?
Megjegyzések
Válasz
Használja a -o
jelölőt a különböző paraméterek között.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
varázslatként működik.
MEGJEGYZÉS A zárójel és annak tartalma között kell lennie egy szóköznek, ill. nem fog működni.
Magyarázat:
-
-type f
– csak fájlok keresése (könyvtárak nem) -
\(
&\)
– szükségesek ahhoz, hogy a-type f
minden argumentumra érvényes legyen -
-o
– logikus VAGY operátor -
-iname
– mint például-name
, de az egyezés nem különbözteti meg a kis- és nagybetűket h3> Megjegyzések- Szüksége van zárójelekre. A parancs nálam nélkülük működik. Szükség van rájuk néhány héjhoz?
- @miked A parancs nélkülük " " fog működni, igen, de ' d eredményeként találatokat találhat a .png végű könyvtárakra, valamint a .jpg végződésű fájlokra, ami nem éppen az volt a célja.
- Köszönöm a pontosítást! Az
type -f
nem terjed ki és vonatkozik mindkét kifejezésre zárójel nélkül, tehátfind ./ -type f -iname \*.jpg -o -type f -iname \*.png
is működik … bár ' két karakterrel hosszabb 🙂 - Ez ' az operátor elsőbbsége. Ahogyan a
a * b + c
különbözik aa * (b + c)
- @jdhao jó fogástól, módosítva.
Válasz
Kombinálhatja a feltételeket a -o
névvel javasolta Shadur . Ne feledje, hogy a -o
elsőbbsége alacsonyabb, mint az egymás melletti elhelyezés, ezért szükség lehet zárójelekre.
find . -name "*.jpg" -o -name "*.png" find . -mtime -7 \( "*.jpg" -o -name "*.png" \) # all .jpg or .png images modified in the past week
Linux rendszeren a -regex
segítségével kombinálhatja a kiterjesztéseket. Az alapértelmezett regexp szintaxis az Emacs ( basic regexps plusz néhány kiterjesztés, például \|
a váltakozáshoz); van lehetőség áttérni a kiterjesztett regexps-re .
find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)"
A FreeBSD-n, a NetBSD-n és OSX esetén a -regex
és a -E
kombinációval használhatja a kiterjesztett regexps-eket.
find -E . -regex ".*\.(jpg|png)"
megjegyzések
- ' mindig jobb használni a
-iname
a-name
helyett – akkor aimage.JPG
és aimage.PnG
Válasz
Ez helyesebb:
find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$"
Megjegyzések
- Miért mondod, hogy " inkább " helyes?
- Azt hiszem, @Kevin, mert a
-iregex
egyezik ajpg
, valamint aJPG Jpg jpG
és ilyenek. Úgy gondolom, hogy a$
nincs ' . - Ez kiválóan működik a MinGW esetén.
- Először kihagyta a keresési mappát első argumentumként, amely dobni fogja egy hiba. Másodszor, OSX-en a menekülés nem fog működni, és ezt kell használni:
find -E . -iregex '.*\.(jpg|png|gif)'
, amint az a @sorin ' s válaszban látható.
Válasz
Világossá tétele érdekében az egyetlen lehetőség, amely Linux, Unix és macOS ízűeken működik:
find -E . -regex ".*\.(jpg|png)"
Ez azért van, mert az OS X verzió kissé eltér, de fontos olyan dolgokat írni, amelyek jól működnek a legtöbb platformon.
Megjegyzések
- -E jelző nem érvényes az Ubuntu 14.04-es keresésre
- A -E jelző nem érvényes a MinGW (legalábbis az a verzió / konfiguráció, amelyet kipróbáltam (alapértelmezett konfiguráció egy adott verzióhoz)).
- A
-type f \( -iname \*.png -o -iname \*.jpg\)
nem működik OSX rendszeren? - Meg tudja erősíteni, hogy
-type f \( -iname \*.png -o -iname \*.jpg\)
működik-e OSX-en
Válasz
/\.(jpe?g|png|gif|bmp)$/i;
Használja.
Megjegyzés s
- Lehet, hogy ezt el kell magyaráznia egy kicsit.
find -name
minta, amely megfelel több mintának a SOfind . | egrep '.jpg|.png'
.