Pot obține toate imaginile jpg folosind:

find . -name "*.jpg" 

Dar cum pot adăuga fișiere png și la rezultate?

Comentarii

Răspunde

Utilizați steagul -o între diferiți parametri.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funcționează ca un farmec.

NOTĂ trebuie să existe un spațiu între paranteză și conținutul său sau nu a funcționat.

Explicație:

  • -type f – căutați numai fișiere (nu directoare)
  • \( & \) – sunt necesare pentru ca -type f să se aplice tuturor argumentelor
  • -o – SAU logic operator
  • -iname – ca -name, dar potrivirea nu face sensibilitate la majuscule și minuscule

Comentarii

  • Aveți nevoie de paranteze. Comanda funcționează pentru mine fără ele. Sunt necesare pentru niște cochilii?
  • @miked Comanda va " funcționa " fără ele, da, dar ' ați terminat obținând accesări pe directoare care se termină în .png, precum și pe fișiere care se termină cu .jpg, care nu este exact ceea ce a fost intenționat.
  • Mulțumesc pentru clarificare! type -f nu se extinde și nu se aplică ambelor expresii fără paranteze, deci funcționează și find ./ -type f -iname \*.jpg -o -type f -iname \*.png … deși are două caractere mai lungi 🙂
  • Este ' o chestiune de prioritate a operatorului. La fel cum a * b + c este diferit de a * (b + c)
  • @jdhao Captură bună, modificată.

Răspuns

Puteți combina criteriile cu -o ca sugerat de Shadur . Rețineți că -o are o prioritate mai mică decât juxtapunerea, deci este posibil să aveți nevoie de paranteze.

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

Pe Linux, puteți utilizați -regex pentru a combina extensiile într-un mod terser. Sintaxa implicită pentru regexp este Emacs ( regexps de bază plus câteva extensii precum \| pentru alternanță); există o opțiune pentru a comuta la regexps extins .

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

Pe FreeBSD, NetBSD și OSX, puteți utiliza -regex combinat cu -E pentru regexps extinse.

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

Comentarii

  • Este ' întotdeauna mai bine să folosiți -iname în loc de -name – atunci veți captura și image.JPG și image.PnG

Răspuns

Acest lucru este mai corect:

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

Comentarii

  • De ce spuneți că este " mai mult " corect?
  • @Kevin cred că pentru că -iregex se potrivește cu jpg, precum și cu JPG Jpg jpG și altele. Cred că $ nu este necesar ' .
  • Acest lucru funcționează bine pe MinGW .
  • Mai întâi, ați omis folderul de căutare ca prim argument care va arunca o eroare. În al doilea rând, pe OSX, scăparea parantezei nu va funcționa, iar aceasta ar trebui folosită în schimb: find -E . -iregex '.*\.(jpg|png|gif)' așa cum se arată în răspunsul @sorin '.

Răspuns

Pentru a clarifica, singura opțiune care funcționează pe Linux, Unix și aroma MacOS este:

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

Asta deoarece versiunea OS X este puțin diferită, dar este important pentru a scrie lucruri care merg bine pe majoritatea platformelor.

Comentarii

  • Steagul -E nu este valid pentru găsirea pe Ubuntu 14.04
  • Steagul -E nu este valid pe MinGW fie (cel puțin versiunea / configurația pe care am încercat-o (configurație implicită pentru o anumită versiune)).
  • Ce parte din -type f \( -iname \*.png -o -iname \*.jpg\) nu funcționează pe OSX?
  • Poate confirma că -type f \( -iname \*.png -o -iname \*.jpg\) funcționează pe OSX

Răspuns

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

Folosește-l.

Comentariu s

  • Poate că va trebui să explicați puțin acest lucru.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *