risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come limitare la profondità per la lista di file ricorsiva?

C'è un modo per limitare la profondità di un elenco di file ricorsivo in linux?

Il comando che sto usando al momento è:

ls -laR > dirlist.txt

Ma ho circa 200 directory e ognuna ha 10 directory. Quindi ci vorrà troppo tempo e troppe risorse di sistema.

Tutto quello che mi interessa davvero sono le informazioni su proprietà e permessi per le sottodirectory di primo livello:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

MODIFICARE:

Scelta finale del comando:

find -maxdepth 2 -type d -ls >dirlist
299
Jon

Controlla il flag -maxdepth di find

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

Qui ho usato 1 come profondità massima del livello, -type d significa trovare solo le directory, che quindi ls -ld elenca i contenuti di, in formato lungo.

437
Alberto Zaccagni

Usa le opzioni di find

In realtà non esiste alcun exec di /bin/ls necessario;

Trova ha un'opzione che fa proprio questo:

find . -maxdepth 2 -type d -ls

Per vedere solo il livello di sottodirectory che ti interessa, aggiungi -mindepth allo stesso livello di -maxdepth:

find . -mindepth 2 -maxdepth 2 -type d -ls


Usa la formattazione dell'output

Quando i dettagli che vengono mostrati devono essere diversi, -printf può mostrare qualsiasi dettaglio su un file in formato personalizzato; Per mostrare le autorizzazioni simboliche e il nome del proprietario del file, utilizzare -printf con %M e %u nel format.

Ho notato in seguito che desideri le informazioni complete sulla proprietà, che include il gruppo. Utilizza %g nel formato per il nome simbolico o %G per l'id del gruppo (come anche %U per l'ID utente numerico)

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

Questo dovrebbe darti solo i dettagli di cui hai bisogno, solo per i file giusti.

Darò un esempio che mostra valori effettivamente diversi per utente e gruppo:

$ Sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(Modificato per la leggibilità: rientrato, accorciato l'ultima riga)


Note sulla performance

Anche se il tempo di esecuzione è per lo più irrilevante per questo tipo di comando, l'aumento delle prestazioni è abbastanza grande qui per renderlo utile indicarlo:

Non solo salviamo la creazione di un nuovo processo per ogni nome - un enorme compito - l'informazione non ha nemmeno bisogno di essere letta, dato che find lo conosce già .

79
Volker Siegel

tree -L 2 -u -g -p -d

Stampa l'albero delle directory in un bel formato fino alla profondità 2 (-L 2). Stampa utente (-u) e gruppo (-g) e permessi (-p). Stampa solo directory (-d). l'albero ha molte altre opzioni utili.

61
Sameer