El comando ls en Linux se utiliza para listar el contenido de cualquier directorio.
De forma predeterminada, enumera todos los contenidos, ya sea un archivo o un directorio o un enlace o una tubería con nombre.
Pero, ¿y si desea enumerar solo los directorios? ¿Cómo lo haces?
Como cualquier cosa en Linux, hay varias maneras de realizar la misma tarea. Listado sólo los directorios no es diferente:
- ls -d */
- ls -l | grep ‘^d’
- buscar . -maxdepth 1 -tipo d
- echo */
- árbol -d -L 1
no te preocupes. Explicaré las cosas en detalle. Aquí está el contenido del directorio que voy a usar en los ejemplos aquí:
Use el comando ls para listar solo directorios
Siempre es bueno hacerlo con el comando ls familiar porque este es el comando que usa para mostrar el contenido de un directorio.
Para listar solo los subdirectorios, use la opción -d
con el comando ls como este:
ls -d */
Aquí está la salida que muestra:
Documents]$ ls -d */another_dir/ my_dir/
¿Por qué */
? Porque sin él, ls -d
solo devolverá el nombre del directorio. La opción -d
lista directorios, no su contenido (que incluye archivos, directorios, etc.).
El */
es un patrón. Con *
, enumera todo el contenido (incluido el contenido de los subdirectorios) y /
restringe el patrón a los directorios.
Esta imagen representa la diferencia bastante bien.
Puede combinarlo con la opción de listado largo -l
y la mayoría de las otras opciones:
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/
Si no desea la barra diagonal final ( / ) al final de los nombres de directorio, puede usar el comando cut para cortarla:
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
Enumere solo subdirectorios en un directorio específico
El comando anterior funciona en el directorio actual. ¿Qué pasa si no está en el mismo directorio?
En esta situación, puede usar */
al final de la ruta del directorio con ls -d
:
ls -d Path/To/Dir/*/
Este es un ejemplo en el que salgo del directorio de documentos y luego enumero solo los directorios dentro del directorio de documentos:
~]$ 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/
¿Notaste que no muestra el directorio oculto? Esa es una deficiencia de este método. Puede usar ls -d .*/
para mostrar directorios ocultos, pero solo muestra directorios ocultos.
Use la combinación de comando ls y grep
Siempre puede confiar en el viejo comando grep para filtrar la salida de contenido específico.
Si hace una lista larga de los contenidos, puede identificar los directorios porque comienzan con d
.
Puede usar grep para filtrar el contenido que comienza con d:
ls -l | grep '^d'
Pero esto le da muchos más campos que solo los nombres de directorio:
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
Use el comando find para listar solo directorios
Aquí le mostramos cómo usar el comando find para listar solo los subdirectorios:
find directory_path -maxdepth 1 -type d
Espero que esté familiarizado con el comando encontrar. No obstante, lo explicaré.
Con type d
, le pide al comando find que solo busque directorios.
Con maxdepth 1
le pide al comando find que mantenga la búsqueda solo en el nivel actual (y no entre en los subdirectorios).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
Como puede ver en la salida anterior, también muestra el directorio oculto.
Use el comando de árbol para listar solo directorios
Si su objetivo es listar solo los directorios, también puede usar el comando de árbol.
De forma predeterminada, el comando tree le proporciona la estructura de directorios completa. Puede modificarlo para mostrar solo directorios y solo en el nivel actual.
tree -dai -L 1
- d-busque solo directorios
- a-busque también archivos y directorios ocultos
- i-elimine la estructura de árbol de la pantalla
- L 1-no entre en los subdirectorios
Aquí está la salida:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
Usar el comando echo para listar directorios
¿El candidato improbable? Le sorprenderá saber que el comando echo en Linux también se puede usar para mostrar el contenido de un directorio. Prueba a usar echo *
y compruébalo por ti mismo.
Similar al comando ls, también puede usar el patrón */
para listar solo los directorios en el directorio de trabajo actual.
echo */
Aquí está la salida que es idéntica a la que obtuvo con el comando ls -d
:
Podría haber más formas de listar solo los directorios, no los archivos. De hecho, los métodos discutidos aquí pueden tener algunos peros y peros basados en lo que está buscando.
Si su objetivo es solo mostrar los directorios, la mayoría de los comandos que he discutido funcionarían. Si desea algo más específico, como obtener solo el nombre de los directorios con barra diagonal, etc., tendrá que hacer un poco de formato por su cuenta.
Espero que encuentre útil este consejo para Linux. Preguntas y sugerencias son siempre bienvenidas.