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.
find
stamperà 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 find
filtro 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 sed
un’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