¿Listar solo directorios usando ls en Bash? [cerrado]
Este comando enumera los directorios en la ruta actual:
ls -d */
¿Qué hace exactamente el patrón */
?
¿Y cómo podemos dar la ruta absoluta en el comando anterior (por ejemplo ls -d /home/alice/Documents
) para enumerar solo directorios en esa ruta?
*/
es un patrón que coincide con todos los subdirectorios en el directorio actual ( *
coincidiría con todos los archivos y subdirectorios; lo /
restringe a directorios). De manera similar, para enumerar todos los subdirectorios en /home/alice/Documents, usels -d /home/alice/Documents/*/
Cuatro formas de hacer esto, cada una con un formato de salida diferente
1. Usandoecho
Ejemplo: echo */
Esto echo */*/
es lo que obtuve:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
2. Usando ls
solo
Ejemplo: ls -d */
Esto es exactamente lo que obtuve:
cs/ files/ masters/
draft/ hacks/ static/
O como lista (con información detallada):ls -dl */
3. Usando ls
ygrep
Ejemplo: ls -l | grep "^d"
Esto es lo que obtuve:
drwxr-xr-x 24 h staff 816 Jun 8 10:55 cs
drwxr-xr-x 6 h staff 204 Jun 8 10:55 draft
drwxr-xr-x 9 h staff 306 Jun 8 10:55 files
drwxr-xr-x 2 h staff 68 Jun 9 13:19 hacks
drwxr-xr-x 6 h staff 204 Jun 8 10:55 masters
drwxr-xr-x 4 h staff 136 Jun 8 10:55 static
4. Bash Script (no recomendado para nombres de archivos que contienen espacios)
Ejemplo: for i in $(ls -d */); do echo ${i%%/}; done
Esto es lo que obtuve:
cs
draft
files
hacks
masters
static
Si desea tener '/' como carácter final, el comando será:for i in $(ls -d */); do echo ${i}; done
cs/
draft/
files/
hacks/
masters/
static/
Yo suelo:
ls -d */ | cut -f1 -d'/'
Esto crea una sola columna sin una barra diagonal, lo que resulta útil en scripts.