Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

170
Visualizações
`ls -l` para todos los directorios principales

Quiero obtener una lista de todos los permisos de directorio de la carpeta actual a / . Por ejemplo, para el directorio: /var/lib/program/subfolder , quiero una salida como:

 $ pwd /var/lib/program/subfolder $ magic_ls_-l_command somefile drwxr-xr-x 10 root root 4096 May 15 20:20 var drwxr-xr-x 10 root root 4096 May 15 20:20 lib drwxrwxr-x 10 root user 4096 May 16 20:21 program drwxrwxr-x 10 root user 4096 May 16 20:21 subfolder -rwxrwxr-- 1 root user 4096 May 16 20:22 somefile

No me importa el orden (de /var a /subfolder o al revés), la cantidad de enlaces duros o incluso la fecha. Simplemente los escribí para emular la salida ls -l . Además, no me importa cómo se imprima cada nombre de archivo ( /var y /lib , var y lib , o /var y /var/lib ). Solo estoy interesado en la propiedad de cada archivo/directorio en la ruta desde el archivo elegido o pwd a / .

En caso de que deba instalar algún programa, estoy bajo Ubuntu 20.04.

over 4 years ago · Santiago Trujillo
7 Respostas
Responde à pergunta

0

Escribí un script bash para ti. Tendrá algunos errores, si tiene espacio en los nombres. Si te molesta, estoy feliz por las recomendaciones de cambios en los comentarios.

 #!/bin/bash if [ ! -z "$1" ] && [ -e "$1" ] then path=`realpath -s "$1"` # read argument as absolute path else path="$PWD" # No valid argument, so we take pwd fi paths="" while [ "$path" != / ];do paths+=" $path" path=`dirname "$path"` done paths+=" $path" # Adding / to pathlist too ls -ld $paths

Con realpath -s puede capturar la ruta absoluta, pero no seguirá el enlace. Si no se da ningún argumento, usaremos pwd como archivo/directorio para listar.

Agregamos cada ruta a una lista. Esto nos da la ventaja de un mejor diseño al final, de modo que obtenemos una buena tabla porque ejecutamos ls solo una vez.

Producción:

 bobafit:~$ magic_ls_-l_command /usr/bin/python3 drwxr-xr-x 21 root root 4096 Jun 20 10:07 / drwxr-xr-x 14 root root 4096 Sep 5 2019 /usr drwxr-xr-x 2 root root 110592 Jun 20 10:07 /usr/bin lrwxrwxrwx 1 root root 9 Apr 7 12:43 /usr/bin/python3 -> python3.8
over 4 years ago · Santiago Trujillo Relatório

0

Esto posiblemente debería funcionar:

 pwd ; ls -lh ; while true ; do cd .. ; pwd ; ls -lh ; [[ "$PWD" == "/" ]] && break ; done

EDITAR: Entendí mal la pregunta al principio. Prueba esto:

 (pwd ; ls -ldh ; while true ; do cd .. ; pwd ; ls -ldh ; [[ "$PWD" == "/" ]] && break ; done ; cd "$START")

EDIT2: la respuesta de fillipe es probablemente la mejor, pero aquí está mi tercer y último intento, que funciona tanto en archivos como en directorios:

 magic_ls() { fname="$1" while true ; do ls -lhd "$fname" [[ "$fname" == "/" ]] && break ; fname=$(dirname $(readlink -f "$fname")) done }
over 4 years ago · Santiago Trujillo Relatório

0

Hice este pequeño script que hace esto. Yo uso cd "$1"; pwd para obtener el directorio actual para que las rutas no se canonicen (por ejemplo, si prueba magic-ls . y su directorio actual es /var/lib/postgres, pero ese es un enlace simbólico a /mnt/postgres, obtendrá /var , /var/lib y /var/lib/postgres , al usar realpath obtendrías /mnt y /mnt/postgres )

 magic-ls() { local current=$(cd "$1"; pwd) while [[ $current != '/' ]]; do ls -ld "$current" current=$(dirname "$current") done }

Aquí hay una salida de ejemplo:

 [leodag@desk ~]$ magic-ls drwx------ 1 leodag leodag 2722 jun 21 13:49 /home/leodag drwxr-xr-x 1 root root 18 mai 2 2019 /home

Por cierto, también funcionará sin argumentos ya que cd "" no cambia su directorio.

Editar: eliminó la realpath de la verificación while, ya que eso podría generar resultados inesperados si hubiera un enlace a / en la ruta, y no era necesario.

over 4 years ago · Santiago Trujillo Relatório

0

#! /bin/bash cur="" IFS="/" path=`pwd` for dir in ${path:1} do cur=$cur/$dir ls -lhd "$cur" done cur=$cur/$1 ls -lhd "$cur"

Sesión terminal:

 $ pwd /tmp/dir_underscore/dir space/dir special @!) $ ls bash.sh test.txt $ ./bash.sh test.txt drwxrwxrwt 28 root root 36K Jun 21 22:45 /tmp drwxr-xr-x 3 root root 4.0K Jun 21 22:27 /tmp/dir_underscore drwxr-xr-x 3 root root 4.0K Jun 21 22:28 '/tmp/dir_underscore/dir space' drwxr-xr-x 2 root root 4.0K Jun 21 22:54 '/tmp/dir_underscore/dir space/dir special @!)' -rw-r--r-- 1 root root 0 Jun 21 22:29 '/tmp/dir_underscore/dir space/dir special @!)/test.txt'
over 4 years ago · Santiago Trujillo Relatório

0

Solo usando la expansión de parámetros:

 #!/usr/bin/env bash path="$1" while test -n "$path"; do ls -lLd "$path" path="${path%/*}" done

método de llamada:

 bash test.sh /var/lib/program/subfolder/somefile

donación

 -rw-r--r-- 1 root root 0 Jun 21 18:49 /var/lib/program/subfolder/somefile drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program/subfolder drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib/program drwxr-xr-x 1 root root 4096 Jun 21 18:49 /var/lib drwxr-xr-x 1 root root 4096 Jun 13 19:24 /var
over 4 years ago · Santiago Trujillo Relatório

0

Esta pregunta ya ha sido respondida en superuser.com (no sé si puedo marcar una pregunta de un sitio como duplicada de otro). La solución es tan simple como escribir (asumiendo que estoy en el mismo directorio que el nombre del archivo de destino):

 $ nombrei -l $(pwd)/algunarchivo ## o `nombrei -l $(rutareal -s algunarchivo)`

Debido a -l , enumera los permisos básicos en formato largo para cada directorio principal.

Tengo que usar pwd / realpath porque namei no resuelve las rutas relativas. Si no estoy en el directorio de destino, simplemente escriba la ruta completa.

over 4 years ago · Santiago Trujillo Relatório

0

Sólo mis 2 centavos. Mi mac no tiene el comando namei (quizás homebrew tenga una copia), pero quería crear una versión rápida que alineara la salida en orden de arriba hacia abajo

 #!/usr/bin/env bash path="${1%/}" DIRS=() while test -n "$path"; do DIRS=( "$path" "${DIRS[@]}" ) path="${path%/*}" done ls -ld "${DIRS[@]}"

Salida de ejemplo:

 $ lspath $TMPDIR lrwxr-xr-x@ 1 root wheel 11 Oct 5 2018 /var -> private/var drwxr-xr-x 7 root wheel 224 Jul 16 2020 /var/folders drwxr-xr-x@ 3 root wheel 96 Apr 5 2018 /var/folders/0c drwxr-xr-x@ 5 me staff 160 Apr 5 2018 /var/folders/0c/2_s_qxd11m3d1smzqdrs3qg40000gp drwx------@ 255 me staff 8160 Oct 7 09:18 /var/folders/0c/2_s_qxd11m3d1smzqdrs3qg40000gp/T
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda