Oye, eso es bastante ingenioso, siempre me acostumbré ls -al | grep '^d', esto es mucho más sucinto.
paxdiablo
43
Por que usar */ ?? ¿¡por favor explique!?
Chandeep
66
No tengo una explicación adecuada, sin embargo, sé que */obliga a mostrar solo los elementos que terminan con una barra diagonal, que en este caso sería un directorio, incluso si no se utiliza la -Fopción de ls. Similar al comportamiento de ls *phpy cómo muestra todos los archivos que terminan phpen un directorio.
David Hancock
3
@ user975234 Alguien hizo una pregunta similar, y hay una muy buena explicación publicada enlace
Para mí, esta parece ser la forma en que debería hacerse. A diferencia de las lssoluciones sugeridas , findes el único responsable de hacer el trabajo (no depender de la expansión de comodines de shell, que puede imponer límites). También es mucho más conciso.
oruga
1
Lo malo de esto es que no funciona si está intentando recorrer los resultados y sus resultados tienen espacios en los nombres.
ubiquibacon
2
Alternativamente, si no se desea incluir el propio directorio: find * -maxdepth 0 -type d.
James Ko
@ubiquibacon Use find's -print0u -execopción.
1
Esto es realmente lento, al menos en mi Mac. Parece hacer la búsqueda recursiva completa que findgeneralmente hace pero solo muestra las carpetas en profundidad 1.
Kara Brightwell
22
El seguimiento
find *-maxdepth 0-type d
básicamente filtra la expansión de '*', es decir, todas las entradas en el directorio actual, por la -type dcondición.
La ventaja es que la salida es la misma ls -1 *, pero solo con directorios y entradas que no comienzan con un punto
Y gracias por explicar los cambios. Stack Overflow se trata de respuestas, siempre agradezco que a la gente le guste con una explicación vs. "¡solo lea la entrada del hombre!" <- esa no es una respuesta.
fusion27
Para comenzar desde la línea 2 (omita la línea con solo un punto):tree -d -L 1 -i --noreport | tail -n +2
adius
Esta es la solución mejor clasificada que enumera los directorios vinculados por software y lo hace de manera útil, exponiéndolos como un enlace. Prefiero la variación:tree -C -d -L 1 -i --noreport | tail -n+2
Amnon Harel
9
ls -l | grep '^d'
Puedes hacer un alias y ponerlo en el archivo de perfil
los enlaces no se ven con este comando. Y un enlace puede ser un archivo o un directorio. Ejemplo: lrwxrwxrwx 1 root root 21 avril 15 17:38 cron -> / lib / init / upstart-job.
c-toesca
7
find .-maxdepth 1-type d -name [^\.]\* | sed 's:^\./::'
☀ encontrar. -maxdepth 1 -type d -name [^ \.] * | sed 's: ^ \ ./ ::' zsh: no se encontraron coincidencias: [^.] *
Michael Cole
6
Para enumerar los directorios en el directorio de trabajo actual
ls -d */se puede utilizar. Y si necesita enumerar los directorios ocultos, use este comando
ls -d .*/
ls -d <ruta del directorio personalizado> | sed -e "s / \ /// g" no funciona ... ¿alguna pista?
Dhwanit
¡Gracias! Solo quería la lista de directorios sin todos los permisos y esto funcionó. :)
codingjeremy
5
find specifiedpath -type d
Si no desea recurrir en subdirectorios, puede hacerlo en su lugar:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Tenga en cuenta que los directorios "punto" (cuyo nombre comienza con .) también aparecerán en la lista; pero no los directorios especiales .ni ... Si no desea directorios de "puntos", puede simplemente grepeliminarlos:
enumerará todos los directorios, incluidos los directorios ocultos, en forma larga.
Recientemente cambié a zsh (MacOS Catalina) y descubrí que:
ls -ld */.*/
ya no funciona si el directorio actual no contiene directorios ocultos.
zsh: no matches found:.*/
Imprimirá el error anterior, pero tampoco imprimirá ningún directorio.
ls -ld *(/).*(/)
También falla de la misma manera.
Hasta ahora he encontrado que esto:
ls -ld */;ls -ld .*/
Es una solución decente. El ;es un separador de comandos. Pero significa que si no hay directorios ocultos, enumerará los directorios y aún imprimirá el error para ningún directorio oculto:
foo
bar
zsh: no matches found:.*/
lses el comando shell de contenido de la lista de directorio actual -les el indicador para especificar que desea a la lista en Longford (un elemento por línea + un montón de otra información fresca) -des la bandera para listar todos los directorios "como archivos" y no de forma recursiva */es el argumento 'enumerar todos los archivos que terminan en una barra inclinada' *es un simple comando regex para "cualquier cosa", por lo que */le pide al shell que enumere "cualquier cosa que termine en '/'"
Ver man lspara más información.
Pongo esto:
alias lad="ls -ld */;ls -ld .*/"
en mi .zshrc, y parece funcionar bien.
NOTA: también he descubierto que
ls -ld .*/ 2> /dev/null
no funciona, ya que todavía imprime esterr en la terminal. Actualizaré mi respuesta si / cuando encuentre una solución.
Esto podría incluir archivos, si alguno de los nombres de archivo incluye drw, y excluiría cualquier directorio que no sea legible y escribible por el propietario. grep ^dFunciona mejor
Respuestas:
Pruebe esto
ls -d */
para enumerar directorios dentro del directorio actualfuente
ls -al | grep '^d'
, esto es mucho más sucinto.*/
obliga a mostrar solo los elementos que terminan con una barra diagonal, que en este caso sería un directorio, incluso si no se utiliza la-F
opción dels
. Similar al comportamiento dels *php
y cómo muestra todos los archivos que terminanphp
en un directorio.echo */
haré lo mismo tambiénPrueba esto:
fuente
ls
soluciones sugeridas ,find
es el único responsable de hacer el trabajo (no depender de la expansión de comodines de shell, que puede imponer límites). También es mucho más conciso.find * -maxdepth 0 -type d
.find
's-print0
u-exec
opción.find
generalmente hace pero solo muestra las carpetas en profundidad 1.El seguimiento
básicamente filtra la expansión de '*', es decir, todas las entradas en el directorio actual, por la
-type d
condición.La ventaja es que la salida es la misma
ls -1 *
, pero solo con directorios y entradas que no comienzan con un puntofuente
Puedes usar
ls -d */
otree -d
Otra solución sería globbing, pero esto depende del shell que esté utilizando y si se admite globbing para directorios.
Por ejemplo ZSH:
fuente
tree
?tree
no está instalada por defecto (aunque está en los repositorios).tree
comando no es un comando nativo de Unix ( corrígeme si me equivoco).Dado que hay docenas de formas de hacerlo, aquí hay otra:
fuente
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
Puedes hacer un alias y ponerlo en el archivo de perfil
fuente
fuente
Para enumerar los directorios en el directorio de trabajo actual
ls -d */
se puede utilizar. Y si necesita enumerar los directorios ocultos, use este comandols -d .*/
fuente
use esto para obtener una lista de directorio
fuente
find specifiedpath -type d
Si no desea recurrir en subdirectorios, puede hacerlo en su lugar:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Tenga en cuenta que los directorios "punto" (cuyo nombre comienza con
.
) también aparecerán en la lista; pero no los directorios especiales.
ni..
. Si no desea directorios de "puntos", puede simplementegrep
eliminarlos:find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
fuente
mindepth
que debes deshacerte.
! 😁La respuesta dependerá de su caparazón .
En
zsh
, por ejemplo, puede hacer lo siguiente:Y se mostrarán todos los directorios dentro del directorio de trabajo actual.
Ver
man zshexpn
para más información.Un enfoque alternativo sería el uso
find(1)
, que debería funcionar en la mayoría de los sabores de Unix:find(1)
tiene muchos usos, por lo que definitivamente lo recomendaríaman find
.fuente
Puede usar el
tree
comando con sud
interruptor para lograr esto.ver
man tree
para más información.fuente
tree
. Oh, bueno, no era mi intención robar el trueno de nadie.Si tengo este directorio:
ls -l
Para obtener todos los directorios, use -L para resolver enlaces:
ls -lL | grep '^d'
Sin -L:
ls -l | grep '^d'
Falta el directorio conf_nagios .
fuente
fuente
Esto ha estado funcionando para mí:
(Pero, me estoy cambiando
echo */
según lo mencionado por @nos)fuente
Aquí hay otra solución que muestra los directorios vinculados. Lo prefiero un poco porque es un subconjunto de la salida ls -l "normal":
fuente
En bash:
Listará todos los directorios
enumerará todos los directorios en forma larga
enumerará todos los directorios, incluidos los directorios ocultos, en forma larga.
Recientemente cambié a zsh (MacOS Catalina) y descubrí que:
ya no funciona si el directorio actual no contiene directorios ocultos.
Imprimirá el error anterior, pero tampoco imprimirá ningún directorio.
También falla de la misma manera.
Hasta ahora he encontrado que esto:
Es una solución decente. El
;
es un separador de comandos. Pero significa que si no hay directorios ocultos, enumerará los directorios y aún imprimirá el error para ningún directorio oculto:ls
es el comando shell de contenido de la lista de directorio actual-l
es el indicador para especificar que desea a la lista en Longford (un elemento por línea + un montón de otra información fresca)-d
es la bandera para listar todos los directorios "como archivos" y no de forma recursiva*/
es el argumento 'enumerar todos los archivos que terminan en una barra inclinada'*
es un simple comando regex para "cualquier cosa", por lo que*/
le pide al shell que enumere "cualquier cosa que termine en '/'"Ver
man ls
para más información.Pongo esto:
alias lad="ls -ld */;ls -ld .*/"
en mi .zshrc, y parece funcionar bien.
NOTA: también he descubierto que
ls -ld .*/ 2> /dev/null
no funciona, ya que todavía imprime esterr en la terminal. Actualizaré mi respuesta si / cuando encuentre una solución.
fuente
du -d1
Es quizás la opción más corta. (Siempre que no necesite canalizar la entrada a otro comando).fuente
Para enumerar solo directorios en una ruta especificada, simplemente escriba ls -l | grep drw
fuente
drw
, y excluiría cualquier directorio que no sea legible y escribible por el propietario.grep ^d
Funciona mejorLista larga de directorios
Listado de directorios
- ls -d * /
fuente