GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo enumerar solo directorios en Linux

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.


Linux
  1. Cómo usar el comando Su en Linux

  2. Comando ls de Linux - Lista de archivos

  3. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

  4. ¿Cómo enumerar recursivamente los directorios en C en Linux?

  5. ¿Cómo puedo enumerar todos los usuarios bloqueados en Linux?

Comando SS en Linux

Cómo listar archivos recursivamente en Linux

Cómo enumerar los sistemas de archivos en Linux con lfs

Cómo enumerar discos en Linux

Cómo enumerar usuarios y grupos en Linux

Cómo enumerar todos los usuarios de un grupo en Linux