Come escludere le cartelle proc e sys dalla ricerca con il comando find?


10

Volevo eseguire uno script che selezionasse un percorso di directory casuale:

find / -type d | shuf -n1 

Sfortunatamente ricevo messaggi di errore sul divieto di accedere a determinate directory.

Come posso escludere una directory dalla ricerca con find?

Risposte:


13

Per escludere percorsi specifici, su Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

Un altro approccio è quello di dire di findnon ricorrere in diversi filesystem.

find / -xdev -type d

È inoltre possibile utilizzare Locate per eseguire una query su un database di nomi di file (di solito aggiornato di notte, è possibile aggiornarlo manualmente utilizzando updatedb) invece del sistema live.

locate '*' | shuf -n 1

grande, breve e perspicace. find / -xdev -type d stesso funziona, ma trova / -xdev -type d | shuf -n 1 visualizza i messaggi di errore.
Abdul Al Hazred,

1
@AbdulAlHazred non hai detto quali messaggi ma suppongo siano errori di "autorizzazione negata". O eseguire il comando come root o semplicemente ignorare gli errori da loro invio a stderr: find / -xdev -type d 2>/dev/null.
terdon

1
Non potresti semplicemente fare find / \( -path /sys -o -path /proc \) -prune -o -type dSarebbe utile se vuoi escludere più regs come /devo /tmp, ecc.
BrainStone,

6

con GNU find puoi anche usare le opzioni regex, ad esempio in questo modo:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

questo è l'approccio più bello, di gran lunga (rant: quindi c'è un'opzione gnu che rende find / usable su gnu linux come su qualsiasi altro sistema operativo che non aveva un'implementazione shitty / proc ;-)
Florian Heigl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.