Quiero enumerar solo los directorios en la ruta especificada ( lsno tiene esa opción). Además, ¿se puede hacer esto con un solo comando de línea?
Quiero enumerar solo los directorios en la ruta especificada ( lsno tiene esa opción). Además, ¿se puede hacer esto con un solo comando de línea?
Respuestas:
Pruebe esto ls -d */para enumerar directorios dentro del directorio actual
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 -Fopción de ls. Similar al comportamiento de ls *phpy cómo muestra todos los archivos que terminan phpen un directorio.
echo */haré lo mismo también
Prueba esto:
find . -maxdepth 1 -type d
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.
find * -maxdepth 0 -type d.
findgeneralmente hace pero solo muestra las carpetas en profundidad 1.
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
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:
zsh # ls *(/)
tree?
treeno está instalada por defecto (aunque está en los repositorios).
treecomando no es un comando nativo de Unix ( corrígeme si me equivoco).
Dado que hay docenas de formas de hacerlo, aquí hay otra:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
Puedes hacer un alias y ponerlo en el archivo de perfil
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
use esto para obtener una lista de directorio
ls -d */ | sed -e "s/\///g"
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:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepthque debes deshacerte .! 😁
La respuesta dependerá de su caparazón .
En zsh, por ejemplo, puede hacer lo siguiente:
echo *(/)
Y se mostrarán todos los directorios dentro del directorio de trabajo actual.
Ver man zshexpnpara 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 . -maxdepth 1 -type d -print
find(1)tiene muchos usos, por lo que definitivamente lo recomendaría man find.
Puede usar el treecomando con su dinterruptor para lograr esto.
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
ver man treepara más información.
tree. Oh, bueno, no era mi intención robar el trueno de nadie.
Si tengo este directorio:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
Para obtener todos los directorios, use -L para resolver enlaces:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
Sin -L:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
Falta el directorio conf_nagios .
Esto ha estado funcionando para mí:
`ls -F | grep /`
(Pero, me estoy cambiando echo */según lo mencionado por @nos)
Aquí hay otra solución que muestra los directorios vinculados. Lo prefiero un poco porque es un subconjunto de la salida ls -l "normal":
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
En bash:
ls -d */
Listará todos los directorios
ls -ld */
enumerará todos los directorios en forma larga
ls -ld */ .*/
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.
Para enumerar solo directorios en una ruta especificada, simplemente escriba ls -l | grep drw
drw, y excluiría cualquier directorio que no sea legible y escribible por el propietario. grep ^dFunciona mejor
Lista larga de directorios
Listado de directorios
- ls -d * /