Come cercare i nomi delle directory in modo ricorsivo in Linux

Come cercare i nomi delle directory in modo ricorsivo in Linux

In Linux, tutto è archiviato in directory e, quando si scrivono script bash, è spesso utile cercare le directory per nome. Fortunatamente, puoi utilizzare find il comando per cercare i nomi delle directory in modo ricorsivo e visualizzare le corrispondenze.

Cerca nelle directory

Il comando find viene utilizzato per cercare le directory in Linux. È completamente ricorsivo per impostazione predefinita, quindi cercherà le corrispondenze in tutte le sottodirectory.

Se usi -type d il flag, find funzionerà in “modalità directory” e cercherà solo le directory che non corrispondono a nessun file. Puoi usarlo insieme -name per cercare le directory per nome:

find. -type d -name "search"

Questo comando viene eseguito nella directory corrente, ma può anche cercare altre directory come ~.

Il problema con l’utilizzo -name è che corrisponderà solo ai nomi diretti, il che significa che non funzionerà se non corrisponde al nome di directory completo. Tuttavia, puoi utilizzare i caratteri jolly per risolvere questo problema e posizionare il carattere jolly prima e dopo la stringa di ricerca corrisponderà a una sottostringa in qualsiasi punto del nome della directory. Se includi anche nomi di file, puoi utilizzare i caratteri jolly per abbinare i file che terminano con un’estensione specifica.

find. -type d -name "*search*"

Tuttavia, questo corrisponderà solo al nome della directory e ignorerà comunque la directory padre. Se si desidera eseguire la corrispondenza utilizzando l’intero percorso del file, è necessario utilizzare l’opzione Regex descritta di seguito.

findstamperà un elenco di tutte le directory corrispondenti, ma devi fare attenzione per assicurarti di utilizzare i percorsi assoluti o relativi in ​​modo coerente, perché ciò influenzerà la risposta finale. Se utilizzi un percorso relativo, ad esempio un punto per “directory corrente”, le risposte saranno relative. Ma se specifichi direttamente il percorso, anche se è la directory corrente, il percorso sarà assoluto, a partire dalla radice.

find fa anche più della semplice ricerca di testo: può essere utilizzato per abbinare i file in base a timestamp, dimensioni dei file e altri identificatori di Linux. Può anche essere utilizzato -exec per eseguire comandi su ogni file o directory.

Ricerca con espressioni regolari

Puoi anche utilizzare un findfiltro delle espressioni regolari (Regex) più avanzato per trovare corrispondenze per ricerche complesse.

Uno dei principali vantaggi dell’utilizzo di Regex è che corrisponderà all’intera directory, comprese le directory di base che portano ad essa.

Puoi usare Regex -regex invece di -name. Aiuta anche a includere sedun’espressione regolare compatibile con -regextype sed.

trova. -type d -regextype sed -regex “.*one\/.*”

In questo esempio, l’espressione regolare inizia facendo .*one corrispondere tutte le directory che terminano con “uno”. Il punto e il carattere jolly corrisponderanno a qualsiasi sottostringa precedente a questa. Viene quindi eseguito l’escape della barra \/ in modo che corrisponda alla fine della directory, seguita da un altro carattere jolly per corrispondere a qualsiasi nome di directory.

In generale, questo corrisponderà a qualsiasi directory il cui genitore termina con “uno”, ovunque si trovi, anche nelle sottodirectory. Regex è un’espressione potente e devi fare attenzione che la tua espressione corrisponda esattamente a ciò che desideri, né più né meno.

Utilizzo di grep con la ricerca

Poiché find può anche generare un elenco di directory non elaborato, può essere passato ad altri comandi per l’elaborazione. Ad esempio, grep utilizzato come utilità di ricerca di testo e utilizzato rapidamente sulla riga di comando per una semplice ricerca ed evidenziazione.

find. -type d | grep foo

grep è anche un’utilità di ricerca completa e può essere utilizzata con strumenti come le espressioni regolari per migliorare le ricerche. Puoi leggere la nostra guida all’uso per saperne di più.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *