Jeg kan få alle jpg bilder ved å bruke:

find . -name "*.jpg" 

Men hvordan kan jeg legge til png filer i resultatene også?

Kommentarer

Svar

Bruk -o -flagget mellom forskjellige parametere.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) fungerer som en sjarm.

MERK Det være et mellomrom mellom braketten og innholdet eller det fungerer ikke.

Forklaring:

  • -type f – bare søk etter filer (ikke kataloger)
  • \( & \) – er nødvendig for at -type f skal gjelde for alle argumenter
  • -o – logisk ELLER operatør
  • -iname – som -name, men samsvaret er ikke mellom store og små bokstaver

Kommentarer

  • Trenger du parenteser. Kommandoen fungerer for meg uten dem. Trengs de for noen skall?
  • @miked Kommandoen " fungerer " uten dem, ja, men du ' slutter å få treff på kataloger som ender med .png, samt filer som slutter med .jpg, som ikke er akkurat det som var ment.
  • Takk for avklaring! type -f utvides ikke og gjelder ikke begge uttrykkene uten parenteser. Så find ./ -type f -iname \*.jpg -o -type f -iname \*.png fungerer også … selv om det ' har to tegn lenger 🙂
  • Det ' er et spørsmål om operatørens forrang. Akkurat som a * b + c er forskjellig fra a * (b + c)
  • @jdhao God fangst, endret.

Svar

Du kan kombinere kriterier med -o som foreslått av Shadur . Merk at -o har lavere prioritet enn sidestilling, så du kan trenge parenteser.

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

På Linux kan du bruk -regex for å kombinere utvidelser på en terser måte. Standard regexp-syntaks er Emacs ( grunnleggende regexps pluss noen få utvidelser som \| for veksling); det er et alternativ å bytte til utvidede regexps .

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

På FreeBSD, NetBSD og OSX, kan du bruke -regex kombinert med -E for utvidede regexps.

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

Kommentarer

  • Det ' er alltid bedre å bruke -iname i stedet for -name – så vil du også fange image.JPG og image.PnG

Svar

Dette er mer riktig:

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

Kommentarer

  • Hvorfor sier du at det er " mer " riktig?
  • @Kevin antar jeg at -iregex samsvarer med jpg så vel som JPG Jpg jpG og slikt. Jeg tror $ ikke er ' t nødvendig .
  • Dette fungerer bra på MinGW .
  • Først utelatt du søkemappen som første argument som vil kaste en feil. For det andre, på OSX vil ikke unnslippe parentes fungere, og dette bør brukes i stedet: find -E . -iregex '.*\.(jpg|png|gif)' som vist i @sorin ' s svar.

Svar

For å gjøre det klart er det eneste alternativet som fungerer på Linux, Unix og macOS-smak:

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

Det er fordi OS X-versjonen er litt annerledes, men det er viktig å skrive ting som går bra på de fleste plattformer.

Kommentarer

  • -E-flagget er ikke gyldig for funn på Ubuntu 14.04
  • -E-flagget er ikke gyldig på MinGW enten (i det minste versjonen / konfigurasjonen jeg prøvde den på (standardkonfigurasjon for en bestemt versjon)).
  • Hvilken del av -type f \( -iname \*.png -o -iname \*.jpg\) fungerer ikke på OSX?
  • Kan bekrefte -type f \( -iname \*.png -o -iname \*.jpg\) fungerer på OSX

Svar

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

Bruk det.

Kommentar s

  • Du må kanskje forklare dette litt.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *