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át find ./ -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 a a * (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 a image.JPG és a image.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 a jpg, valamint a JPG 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük