¿Hay algún comando de Linux que pueda llamar desde un script Bash que imprima la estructura de directorios en forma de árbol, por ejemplo,
folder1
a.txt
b.txt
folder2
folder3
¿Hay algún comando de Linux que pueda llamar desde un script Bash que imprima la estructura de directorios en forma de árbol, por ejemplo,
folder1
a.txt
b.txt
folder2
folder3
Respuestas:
¿Es esto lo que estás buscando árbol ? Debería estar en la mayoría de las distribuciones (tal vez como una instalación opcional).
~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
| |-- dev_snmp6
| |-- netfilter
| |-- rpc
| | |-- auth.rpcsec.context
| | |-- auth.rpcsec.init
| | |-- auth.unix.gid
| | |-- auth.unix.ip
| | |-- nfs4.idtoname
| | |-- nfs4.nametoid
| | |-- nfsd.export
| | `-- nfsd.fh
| `-- stat
|-- root -> /
`-- task
`-- 15589
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/task/15589/fd
|-- fdinfo
`-- root -> /
27 directories
muestra tomada de la página web del mantenedor.
Puede agregar la opción -L #
donde #
se reemplaza por un número, para especificar la profundidad máxima de recursión.
Eliminar -d
para mostrar también los archivos.
-d
para mostrar archivos también!
brew install tree
apt-cyg install tree
(suponiendo que haya instalado apt-cyg)
apt-get install tree
lo instalará.
Puedes usar este:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Mostrará una representación gráfica de los subdirectorios actuales sin archivos en unos segundos , por ejemplo, en /var/cache/:
.
|-apache2
|---mod_cache_disk
|-apparmor
|-apt
|---archives
|-----partial
|-apt-xapian-index
|---index.1
|-dbconfig-common
|---backups
|-debconf
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
.git
?
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Para agregar la solución de Hassou a su .bashrc, intente:
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Este comando funciona para mostrar carpetas y archivos .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Salida de ejemplo:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Fuente: Comentario de @javasheriff aquí . Está sumergido como un comentario y publicarlo como respuesta ayuda a los usuarios a detectarlo fácilmente.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
funcionaba bien
Estoy embelleciendo la salida de la respuesta de @ Hassou con:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Esto es muy parecido a la salida de tree
ahora:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
También puedes hacer un alias:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
Por cierto, tree
no está disponible en algún entorno, como MinGW. Entonces la alternativa es útil.
También puede usar la combinación de los comandos find y awk para imprimir el árbol de directorios. Para obtener detalles, consulte " Cómo imprimir una estructura de directorio de árbol multinivel utilizando los comandos combinados linux find y awk "
find . -type d | awk -F'/' '{
depth=3;
offset=2;
str="| ";
path="";
if(NF >= 2 && NF < depth + offset) {
while(offset < NF) {
path = path "| ";
offset ++;
}
print path "|-- "$NF;
}}'
find
. Ofind . -not -path '*/\.*'
para ocultar archivos y carpetas que comienzan con.
. Si desea tener salida con espacios, como en la pregunta, úsela con este script "buscar prettifier":find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"