Il comando ls in Linux viene utilizzato per elencare il contenuto di qualsiasi directory.
Per impostazione predefinita, elenca tutti i contenuti, sia esso un file o una directory o un collegamento o una named pipe.
Ma cosa succede se si desidera elencare solo le directory? Come fai?
Come qualsiasi cosa in Linux, ci sono diversi modi per eseguire lo stesso compito. Elencare solo le directory non è diverso:
- ls-d */
- ls-l | grep ‘^d’
- trova . – maxdepth 1-tipo d
- eco * /
- albero – d-L 1
Non preoccuparti. Spiegherò le cose in dettaglio. Ecco il contenuto della directory che ho intenzione di utilizzare negli esempi qui:
- Utilizzare il comando ls per elenco directory
- Elenco solo le sottodirectory in una directory specifica
- Usa la combinazione di comando ls e grep
- Utilizzare il comando trova per elencare solo le directory
- Usa il comando ad albero per elencare solo le directory
- Utilizzando il comando echo per l’elenco directory
Utilizzare il comando ls per elenco directory
è sempre bene farlo con il familiare comando ls, perché questo è il comando da utilizzare per la visualizzazione del contenuto di una directory.
Per elencare solo le sottodirectory, usa l’opzione -d
con il comando ls in questo modo:
ls -d */
Ecco l’output che mostra:
Documents]$ ls -d */another_dir/ my_dir/
Perché */
? Perché senza di esso, ls -d
restituirà solo il nome della directory. L’opzione -d
elenca le directory non il suo contenuto (che include file, directory ecc.).
Il */
è un modello. Con *
, si elenca tutto il contenuto (incluso il contenuto delle sottodirectory) e /
limita il modello alle directory.
Questa immagine raffigura la differenza abbastanza bene.
Si può combinare con l’elenco lungo opzione -l
e molte altre opzioni:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
Se non si desidera che il trailing slash (/) alla fine dei nomi di directory, è possibile utilizzare il comando taglia per tagliare fuori:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Elenco solo le sottodirectory in una directory specifica
Il comando di cui sopra funziona nella directory corrente. Cosa succede se non si è nella stessa directory?
In questa situazione, è possibile utilizzare */
alla fine del percorso della directory con ls -d
:
ls -d Path/To/Dir/*/
Ecco un esempio in cui esco dalla directory Documents e quindi elenco solo le directory all’interno della directory Documents:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
Hai notato che non elenca la directory nascosta? Questa è una lacuna di questo metodo. È possibile utilizzare ls -d .*/
per visualizzare le directory nascoste, ma visualizza solo le directory nascoste.
Usa la combinazione di comando ls e grep
Puoi sempre fare affidamento sul buon vecchio comando grep per filtrare l’output per contenuti specifici.
Se si elencano a lungo i contenuti, è possibile identificare le directory perché iniziano con d
.
puoi usare grep per filtrare i contenuti che iniziano con d:
ls -l | grep '^d'
Ma questo ti dà un sacco di più campi di solo i nomi di directory:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Utilizzare il comando trova per elencare solo le directory
Ecco come utilizzare il comando trova per elencare solo le sottodirectory:
find directory_path -maxdepth 1 -type d
spero si ha familiarità con il comando trova. Lo spiegherò comunque.
Con type d
, si chiede al comando find di cercare solo le directory.
Con maxdepth 1
chiedi al comando find di mantenere la ricerca solo al livello corrente (e non andare all’interno delle sottodirectory).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
Come puoi vedere nell’output sopra, mostra anche la directory nascosta.
Usa il comando ad albero per elencare solo le directory
Se il tuo obiettivo è elencare solo le directory, puoi anche usare il comando ad albero.
Per impostazione predefinita, il comando tree fornisce la struttura completa della directory. È possibile modificarlo per mostrare solo le directory e solo al livello corrente.
tree -dai -L 1
- d – look per la directory
- a – cercare i file nascosti e le cartelle
- i – rimuovere la struttura ad albero dal display
- L 1 – non andare nella sottodirectory
Ecco l’output:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
Utilizzando il comando echo per l’elenco directory
improbabile candidato? Sarete sorpresi di sapere che il comando echo in Linux può essere utilizzato anche per la visualizzazione del contenuto di una directory. Prova a usare echo *
e guarda tu stesso.
Simile al comando ls, è anche possibile utilizzare il modello */
per elencare solo le directory nella directory di lavoro corrente.
echo */
Ecco l’output che è identico a quello che hai ottenuto con il comando ls -d
:
Ci potrebbero essere più modi per elencare solo le directory, non i file. In effetti, i metodi discussi qui potrebbero avere alcuni se e ma in base a ciò che stai cercando.
Se il tuo obiettivo è quello di visualizzare solo le directory, la maggior parte dei comandi che ho discusso funzionerebbe. Se vuoi qualcosa di più specifico come ottenere solo il nome delle directory con slash ecc., dovrai fare un po ‘ di formattazione da solo.
Spero che questo suggerimento per Linux sia utile. Domande e suggerimenti sono sempre i benvenuti.