Ik kan alle jpg afbeeldingen krijgen met:

find . -name "*.jpg" 

Maar hoe kan ik ook png bestanden aan de resultaten toevoegen?

Opmerkingen

Antwoord

Gebruik de -o vlag tussen verschillende parameters.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) werkt uitstekend.

OPMERKING Er moet een spatie zijn tussen de haakjes en de inhoud ervan of het zal “niet werken.

Uitleg:

  • -type f – zoek alleen naar bestanden (niet naar mappen)
  • \( & \) – zijn nodig om de -type f toe te passen op alle argumenten
  • -o – logisch OF operator
  • -iname – zoals -name, maar de overeenkomst is niet hoofdlettergevoelig

Opmerkingen

  • Heb je de haakjes nodig? Het commando werkt voor mij zonder hen. Zijn ze nodig voor sommige shells?
  • @miked Het commando zal " werken " zonder hen, ja, maar je ' zou uiteindelijk hits krijgen op mappen die eindigen op .png en op bestanden die eindigen op .jpg, wat niet precies is wat de bedoeling was.
  • Bedankt voor het verduidelijken! De type -f is niet van toepassing op beide expressies zonder de haakjes, dus find ./ -type f -iname \*.jpg -o -type f -iname \*.png werkt ook … hoewel het ' is twee tekens langer 🙂
  • Het ' is een kwestie van prioriteit van de operator. Net zoals a * b + c verschilt van a * (b + c)
  • @jdhao Goede vangst, gewijzigd.

Antwoord

U kunt criteria combineren met -o als voorgesteld door Shadur . Merk op dat -o een lagere prioriteit heeft dan juxtapositie, dus je hebt wellicht haakjes nodig.

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

Onder Linux kun je gebruik -regex om extensies op een kortere manier te combineren. De standaard regexp-syntaxis is Emacs ( basisregexps plus een paar extensies zoals \| voor afwisseling); er is een optie om over te schakelen naar uitgebreide regexps .

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

Op FreeBSD, NetBSD en OSX, kunt u -regex gebruiken in combinatie met -E voor uitgebreide regexps.

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

Reacties

  • Het ' is altijd beter om -iname in plaats van -name – dan leg je ook image.JPG en image.PnG
  • vast

Antwoord

Dit is correcter:

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

Opmerkingen

  • Waarom zegt u dat het " meer " correct is?
  • @Kevin denk ik omdat -iregex overeenkomt met jpg evenals JPG Jpg jpG en dergelijke. Ik denk dat de $ niet ' t nodig is .
  • Dit werkt prima op MinGW .
  • Ten eerste heb je de zoekmap weggelaten als eerste argument dat zal genereren een fout. Ten tweede, op OSX zal het ontsnappen van de haakjes niet werken, en dit zou in plaats daarvan moeten worden gebruikt: find -E . -iregex '.*\.(jpg|png|gif)' zoals getoond in het antwoord van @sorin '.

Antwoord

Om het duidelijk te maken, is de enige optie die werkt op Linux, Unix en macOS-smaak:

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

Dat komt omdat de OS X-versie een beetje anders is, maar dat is belangrijk om dingen te schrijven die goed gaan op de meeste platforms.

Reacties

  • -E-vlag is niet geldig voor zoeken op Ubuntu 14.04
  • De -E-vlag is niet geldig op MinGW ofwel (tenminste de versie / configuratie waarop ik het probeerde (standaardconfiguratie voor een bepaalde versie)).
  • Welk deel van -type f \( -iname \*.png -o -iname \*.jpg\) werkt niet op OSX?
  • Kan bevestigen dat -type f \( -iname \*.png -o -iname \*.jpg\) werkt op OSX

Antwoord

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

Gebruik het.

Commentaar s

  • Misschien moet je dit een beetje uitleggen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *