El comando ls en Linux se usa para enumerar el contenido de cualquier directorio.
De forma predeterminada, enumera todos los contenidos, ya sea un archivo, un directorio, un enlace o una canalización con nombre.
Pero, ¿qué sucede si desea enumerar solo los directorios? ¿Cómo lo haces?
Como cualquier cosa en Linux, hay varias formas de realizar la misma tarea. Listar solo los directorios no es diferente:
- ls -d */
- ls-l | grep '^d'
- encontrar. -max depth 1 -tipo d
- eco */
- árbol -d -L 1
No te preocupes. Voy a 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 directorios solamente
Siempre es bueno hacerlo con el comando familiar ls porque este es el comando que usa para mostrar el contenido de un directorio.
Para enumerar solo los subdirectorios, use -d
opción con el comando ls como este:
ls -d */
Aquí está el resultado que muestra:
[[email protected] Documents]$ ls -d */
another_dir/ my_dir/
Por qué */
? Porque sin él, ls -d
solo devolverá el nombre del directorio. El -d
directorios de lista de opciones, no su contenido (que incluye archivos, directorios, etc.).
El */
es un patrón Con *
, lista todo el contenido (incluido el contenido de los subdirectorios) y el /
restringe el patrón a los directorios.
Esta imagen muestra la diferencia bastante bien.
Puede combinarlo con la opción de lista larga -l
y la mayoría de las otras opciones:
[[email protected] 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 inclinada final (/) al final de los nombres de los directorios, puede usar el comando de corte para eliminarla:
[[email protected] Documents]$ ls -ld */ | cut -f1 -d'/'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Lista solo subdirectorios en un directorio específico
El comando anterior funciona en el directorio actual. ¿Qué pasa si no estás 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/*/
Aquí hay un ejemplo en el que salgo del directorio Documentos y luego enumero solo los directorios dentro del directorio Documentos:
[[email protected] ~]$ 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/
¿Te diste cuenta de que no muestra el directorio oculto? Esa es una de las deficiencias de este método. Puede usar ls -d .*/
para mostrar directorios ocultos, pero solo muestra directorios ocultos.
Usar combinación de ls y comando grep
Siempre puede confiar en el buen 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 los contenidos que comienzan con d:
ls -l | grep '^d'
Pero esto le da muchos más campos que solo los nombres de los directorios:
[[email protected] Documents]$ ls -l | grep '^d'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Use el comando find para listar solo directorios
Aquí se explica cómo usar el comando de búsqueda para enumerar solo los subdirectorios:
find directory_path -maxdepth 1 -type d
Espero que esté familiarizado con el comando de búsqueda. No obstante, lo explicaré.
Con type d
, solicita al comando de búsqueda que solo busque directorios.
Con maxdepth 1
le pide al comando de búsqueda que mantenga la búsqueda solo en el nivel actual (y no entre en los subdirectorios).
[[email protected] Documents]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir
Como puede ver en el resultado anterior, también muestra el directorio oculto.
Usar el comando tree para listar solo directorios
Si su objetivo es enumerar solo los directorios, también puede usar el comando de árbol.
De forma predeterminada, el comando de árbol le proporciona la estructura de directorios completa. Puede modificarlo para mostrar solo directorios y solo en el nivel actual.
tree -dai -L 1
- d - buscar solo directorios
- a:busca también archivos y directorios ocultos
- i - eliminar la estructura de árbol de la pantalla
- L 1 - no entre en los subdirectorios
Aquí está el resultado:
[email protected] Documents]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir
3 directories
Usando el comando echo para listar directorios
¿El candidato improbable? Te sorprenderá saber que el comando echo en Linux también se puede usar para mostrar el contenido de un directorio. Intenta usar echo *
y compruébelo usted mismo.
Similar al comando ls, también puede usar el */
patrón para enumerar solo los directorios en el directorio de trabajo actual.
echo */
Aquí está el resultado que es idéntico al que obtuvo con ls -d
comando:
Podría haber más formas de enumerar solo los directorios, no los archivos. De hecho, los métodos discutidos aquí pueden tener algunos peros basados en lo que está buscando.
Si su objetivo es simplemente mostrar los directorios, la mayoría de los comandos que discutí funcionarían. Si desea algo más específico, como obtener solo el nombre de los directorios con una barra inclinada, etc., tendrá que formatear por su cuenta.
Espero que encuentre útil este consejo de Linux. Las preguntas y sugerencias siempre son bienvenidas.