Tähän kysymykseen on jo annettu vastauksia :
Kommentit
Vastaa
Tätä varten vaihtoehto -prune
on tarkoitettu:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Tässä sanotaan periaatteessa ”jos on” -hakemisto kutsutaan avoid_this_directory_please
, älä kirjoita sitä, muuten, jos se on tavallinen tiedosto, tulosta polun nimi.
Kommentit
- Aion kirjoittaa saman asian, hieman eri tavalla, kuten
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, mutta pidän syntaksistasi paremmin. Kiitos. - @TimKennedy Tarvitset todennäköisesti parensia, jos haluat tehdä
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - hyvä asia. En tiedä edes ' edes, milloin / missä opin sen tekemään suluilla. tuo ikä on kadonnut ajan sumuissa. 🙂
- Tämä tietysti katkaisee kaikki hakemistot, joita kutsutaan
avoid_this_directory_please
missä tahansa puun kohdassa, ei vain ylätason hakemistoissa.-path
antaisi paremman hallinnan siinä, koska -sivulla ( lainaa alla , Xen2050) toteaa. - En tiennyt, että
-prune
otti kaiken huomioon ensimmäisen argumentti, mukaan lukien-type
, ja oli hämmentynyt siitä, että hakemistoja ei voitu karsiafind / -type f -path /proc -prune -o -name foo -print
-toiminnolla.-type d
ja-type f
näkyminen samassa komennossa sai minut napsauttamaan. Nyt olen vihdoin varma käyttämästäfind
, kiitos.
Vastaa
Hakemiston välttämiseksi kokeile -path-testiä:
find . -type f ! -path "*/avoid_this_directory_please/*"
Kommentit
- Huomaa, että Vaikka se estää tiedostojen
avoid_this_directory_please
sisällä olevien tiedostojen valinnan (ellei niiden polku sisällä virheellisiä merkkejä), se ei estäfind
laskeutumasta sinne . Että ' s miksi-prune
on parempi täällä. - Tämä on niin paljon parempi kuin käyttää
prune
. Minun täytyy aina lukea puoli tuntia selvittääkseni, mitä määritän ' et halua löytää, ja pariliitän sitten TAI-logiikkaan saadaksesi haluamasi tiedostot. - @Merlin Se riippuu tietysti siitä, mitä haluat saavuttaa. Kun
-prune
,find
ei voittanut ' edes valittuja polkuja, kun taas! -path
, se silti menee polulle ja tutki kaiken.
Vastaa
Alkaen man find
-path
-osiossa, yhdistämällä ilmeisesti muut 2 vastausta
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print
Vastaa
Kokeile tätä
find -name "*.js" -not -path "./directory/*"
Kommentit
- Tämä toimii, jos etsit vain yhtä laajennustyyppiä. Seuraava epäonnistuu:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: n käyttämisessä: se voi olla hieman hämmentävä. Myös tämä pinonsiirtovirralla kuvaa, miksi se ' on niin ärsyttävä asia.