Come limitare la profondità per l'elenco dei file ricorsivi?


346

C'è un modo per limitare la profondità di un elenco di file ricorsivi in ​​Linux?

Il comando che sto usando al momento è:

ls -laR > dirlist.txt

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

Tutto quello che mi interessa davvero sono le informazioni sulla proprietà e le autorizzazioni 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

3
Potresti anche qualcosa del genere ls -la /var/www/vhosts/*?
KevinO,

Risposte:


494

Acquista la -maxdepthbandiera difind

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

Qui ho usato 1 come profondità di livello massimo, -type dsignifica trovare solo directory, che quindi ls -ldelenca i contenuti di, in formato lungo.


2
Poiché l'OP vuole conoscere le autorizzazioni delle directory stesse, è necessario aggiungere l' -dopzione a ls.
Peter van der Heijden,

@Peter van der Heijden: ho appena scritto la findparte per risolvere il suo problema principale. Comunque grazie lo sto aggiungendo.
Alberto Zaccagni,

3
Io uso -print0e xargs -0molto. Esempio:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Chris K,

2
Eh si, sicuramente sembra sbagliato, non è successo 6 anni fa: D Ho già commentato stackoverflow.com/a/25618630/57095 che dovrebbe essere la risposta accettata.
Alberto Zaccagni,

ahhh maxdepth, c'è un'opzione di profondità?
Alexander Mills,

95

Utilizza findle opzioni di

In realtà non c'è alcun dirigente /bin/lsnecessario;

Trova ha un'opzione che fa proprio questo:

find . -maxdepth 2 -type d -ls

Per vedere solo un livello di sottodirectory che ti interessano, aggiungi -mindepthallo stesso livello di -maxdepth:

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


Usa la formattazione dell'output

Quando i dettagli che vengono mostrati dovrebbero essere diversi, -printfpuoi mostrare qualsiasi dettaglio su un file in formato personalizzato; Per mostrare le autorizzazioni simboliche e il nome del proprietario del file, utilizzare -printfcon %Me %unel file format.

Ho notato in seguito che desideri le informazioni complete sulla proprietà, incluso il gruppo. Utilizzare %gnel formato per il nome simbolico o %Gper l'id gruppo (come anche %Uper 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, per i giusti file.

Farò 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à: rientro, ultima riga abbreviata)


Note sulle prestazioni

Sebbene il tempo di esecuzione sia per lo più irrilevante per questo tipo di comando, l'aumento delle prestazioni è abbastanza grande qui da rendere degno di nota:

Non solo salviamo la creazione di un nuovo processo per ogni nome - un compito enorme - le informazioni non hanno nemmeno bisogno di essere lette, come findgià lo sanno.


9
Questa dovrebbe essere la risposta accettata, molto meglio della mia.
Alberto Zaccagni,

1
@AlbertoZaccagni Immagino che ci piacciano le risposte brevi per far funzionare rapidamente le cose.
anddero,

65

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

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


12
l'albero è amore. l'albero è vita.
yosefrow

Semplicemente tree -L 2 xxx/o tree -L 2 -d xxx/è abbastanza per qualche caso.
Eric Wang,

1

Tutto quello che mi interessa davvero sono le informazioni sulla proprietà e le autorizzazioni per le sottodirectory di primo livello.

Ho trovato una soluzione semplice mentre giocavo il mio pesce, che si adatta perfettamente alle tue esigenze.

ll `ls`

o

ls -l $(ls)
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.