Saan kaikki jpg
kuvat käyttämällä:
find . -name "*.jpg"
Mutta miten voin lisätä png
-tiedostot myös tuloksiin?
Kommentit
Vastaa
Käytä -o
-lippua eri parametrien välillä.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
toimii kuin viehätys.
HUOMAUTUS Hakemiston ja sen sisällön välillä on oltava väli tai se ei toimi.
Selitys:
-
-type f
– etsi vain tiedostoja (ei hakemistoja) -
\(
&\)
– tarvitaan, jotta-type f
soveltuu kaikkiin argumentteihin -
-o
– looginen TAI operaattori -
-iname
– kuten-name
, mutta ottelu ei eroa isoja ja pieniä kirjaimia
Kommentit
- Tarvitsetko sulkeita. Komento toimii minulle ilman heitä. Tarvitaanko niitä joihinkin kuoreihin?
- @miked Komento " toimii " ilman niitä, kyllä, mutta ' d saatat saada osumia hakemistoon, joka päättyy .png-tiedostoon, sekä tiedostoihin, jotka päättyvät .jpg-tiedostoon, mikä ei tarkalleen ole tarkoitettu.
- Kiitos selventämisestä!
type -f
ei ulotu ja päde molempiin lausekkeisiin ilman sulkeita, jotenfind ./ -type f -iname \*.jpg -o -type f -iname \*.png
toimii myös … vaikka se ' kaksi merkkiä pidempään 🙂 - Se ' on operaattorin etusijalla. Aivan kuten
a * b + c
eroaaa * (b + c)
- @jdhao Hyvä saalis, muutettu.
vastaus
Voit yhdistää ehtoja -o
nimellä ehdottanut Shadur . Huomaa, että -o
: llä on alempi etusija kuin rinnakkaisella, joten saatat tarvita sulkeita.
find . -name "*.jpg" -o -name "*.png" find . -mtime -7 \( "*.jpg" -o -name "*.png" \) # all .jpg or .png images modified in the past week
Linuxissa voit käytä -regex
yhdistääksesi laajennukset peräkkäin. Oletusarvoinen regexp-syntaksin muoto on Emacs ( perusregexps ja muutama laajennus, kuten \|
vuorottelulle); siellä on mahdollisuus vaihtaa laajennettuun regexpsiin .
find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)"
FreeBSD: llä, NetBSD: llä ja OSX, voit käyttää -regex
yhdistettynä -E
-laajennuksiin.
find -E . -regex ".*\.(jpg|png)"
kommentit
- ' on aina parempi käyttää
-iname
-name
-kohdan sijaan – sieppaat myösimage.JPG
jaimage.PnG
vastaus
Tämä on oikein:
find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$"
Kommentit
- Miksi sanot, että se on " enemmän " oikein?
- @Kevin luultavasti, koska
-iregex
vastaajpg
sekäJPG Jpg jpG
mielestäni$
ei tarvita ' t tarvita . - Tämä toimii hyvin MinGW -sovelluksessa.
- Ensinnäkin jätit hakukansion ensimmäiseksi argumentiksi, joka heittää virhe. Toiseksi sulkeista ei pääse OSX: ssä, ja sitä tulisi käyttää sen sijaan:
find -E . -iregex '.*\.(jpg|png|gif)'
, kuten @sorin ' s -vastauksessa on esitetty.
vastaus
Selkeyden vuoksi ainoa vaihtoehto, joka toimii Linux-, Unix- ja macOS-makuilla, on:
find -E . -regex ".*\.(jpg|png)"
Tämä johtuu siitä, että OS X -versio on hieman erilainen, mutta on tärkeää kirjoittaa asioita, jotka menevät hyvin useimmille alustoille.
Kommentit
- -E-lippu ei kelpaa löytämiseen Ubuntu 14.04: ssä
- -E-lippu ei kelpaa MinGW joko (ainakin versio / kokoonpano, jonka kokeilin (oletusasetukset tietylle versiolle)).
- Mikä osa
-type f \( -iname \*.png -o -iname \*.jpg\)
ei toimi OSX: ssä? - Voiko vahvistaa, että
-type f \( -iname \*.png -o -iname \*.jpg\)
toimii OSX: llä
Vastaa
/\.(jpe?g|png|gif|bmp)$/i;
Käytä sitä.
Kommentoi s
- Saatat joutua selittämään tätä hieman.
find -name
kuvio, joka vastaa useita malleja Jotenfind . | egrep '.jpg|.png'
paljon.