2011-02-07 12 views
21

Ho molte sottodirectory contenenti dati e voglio un breve elenco di quali lavori (sottodirectory) ho. Non sono soddisfatto del seguente comando.Come `ls` solo un livello in profondità?

$ ls H2* 
H2a: 
energy.dat overlap.dat 
norm.dat zdip.dat ... 
(much more) 
H2b: 
energy.dat overlap.dat 
norm.dat zdip.dat ... 
(much more) 

Questo ingombro inutile vanifica lo scopo del carattere jolly (limitando l'output). Come posso limitare l'output ad un livello profondo? Mi piacerebbe vedere il seguente output

H2a/ H2b/ H2z/ 

Grazie per il vostro aiuto, Nick

risposta

34

Prova questo

ls -d H2*/ 

L'opzione -d dovrebbe elencare "directory solo", ma da solo liste

. 

quale io si trova un po 'strano Il carattere jolly è necessario per ottenere un elenco effettivo di directory.

UPDATE: Come @Philipp fa notare, si può fare anche in modo più conciso e senza lasciare bash dicendo

echo H2*/ 

La differenza è che ls stamperà le voci su righe separate, che è spesso utile per piping ad altre funzioni.

+3

Se mydir è il nome di una directory e si esegue 'ls mydir', ls mostra i contenuti di mydir. Se esegui 'ls -d mydir', ls mostra liste mydir senza mostrare il suo contenuto. Ora se non viene fornita alcuna directory o carattere jolly, allora funziona su "." (vale a dire la directory corrente) per impostazione predefinita. Quindi 'ls -d' è equivalente a 'ls -d.', Che dovrebbe elencare '.' senza mostrare il suo contenuto. Spero che chiarisca un po 'il motivo per cui è richiesto un nome di directory o un carattere jolly. –

+0

@Mansoor, grazie per la spiegazione, ha senso. – harpo

+0

L'opzione -d è superiore alla soluzione eco quando si desidera combinare, ad es. -l per un lungo elenco, per vedere i permessi della cartella. Grazie mille! –

10
echo H2* 

E 'Bash che fa l'espansione, in modo da non nemmeno bisogno ls.

Qualora vi siano sia i file e le directory che iniziano con H2, è possibile aggiungere una barra di limitare il glob alle directory:

echo H2*/ 
+0

Punto interessante. Ma questo includerà i file che iniziano con "H2", e l'OP vuole solo sottodirectory. – harpo

+0

@harpo: ok, ho modificato la mia risposta – Philipp

2

Forse questo è quello che stai cercando?

ls | grep H2* 
+1

Perfetto per me. Permette anche di fare cose come 'ls -l | modello di grep'. –

13

si dovrebbe considerare l'utilizzo trovare, come

find . -type d -maxdepth 1 -name "H2*" 
+1

considera la possibilità di mettere -maxdepth prima -tipo, il tuo comando verrà probabilmente visualizzato in un avviso. Non importa, non è un grosso problema. –

Problemi correlati