bash - solo - listar directorios y subdirectorios linux
Comando ls: ¿cómo puedo obtener una lista recursiva de ruta completa, una línea por archivo? (23)
@ ghostdog74: pequeña modificación con su solución.
El siguiente código se puede usar para buscar archivos con su ruta absoluta completa.
sudo ls -R / | awk ''<br/>
/:$/&&f{s=$0;f=0}<br/>
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}<br/>
NF&&f{ print s"/"$0 }'' | grep [file_to_search]
¿Cómo puedo obtener ls para escupir una lista plana de rutas recursivas de una por línea?
Por ejemplo, solo quiero una lista plana de archivos con sus rutas completas:
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt
ls -a1
casi hace lo que necesito, pero no quiero fragmentos de ruta, quiero rutas completas.
Agregar un comodín al final de un directorio ls fuerza las rutas completas. Ahora mismo tienes esto:
$ ls /home/dreftymac/
foo.txt
bar.txt
/alpha.txt
/bravo.txt
/charlie.txt
Podrías hacer esto en su lugar:
$ ls /home/dreftymac/*
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/:
alpha.txt
bravo.txt
charlie.txt
Desafortunadamente, esto no imprime la ruta completa para los directorios recurrentes, por lo que puede que no sea la solución completa que está buscando.
Aquí hay una respuesta parcial que muestra los nombres de directorio.
ls -mR * | sed -n ''s/://p''
Explicación:
ls -mR *
enumera los nombres completos del directorio que terminan en '':'', luego enumera los archivos en ese directorio por separado
sed -n ''s/://p''
encuentra líneas que terminan en dos puntos, quita los dos puntos e imprime la línea
Al iterar sobre la lista de directorios, deberíamos poder encontrar los directorios también. Todavía trabajando en ello. Es un desafío conseguir los comodines a través de xargs.
Con tener la libertad de usar todas las opciones posibles de ls:
find -type f | xargs ls -1
Creo que para una lista plana la mejor manera es:
find -D tree /fullpath/to-dir/
(o para guardarlo en un archivo txt)
find -D tree /fullpath/to-dir/ > file.txt
Ejecuta un comando de bash con el siguiente formato:
find /path -type f -exec ls -l /{/} /;
El mejor comando es: tree -fi
Para utilizar los archivos pero no los enlaces, debe eliminar >
de su salida:
tree -fi |grep -v />
Si desea conocer la naturaleza de cada archivo, (para leer solo archivos ASCII, por ejemplo) con dos while
s:
tree -fi | /
grep -v /> | /
while read first ; do
file ${first}
done | /
while read second; do
echo ${second} | grep ASCII
done
Intente la siguiente manera más simple:
find "$PWD"
La forma más fácil para todas las personas futuras es simplemente:
du
Sin embargo, esto también muestra el tamaño de lo que contiene cada carpeta. Puede usar awk para mostrar solo el nombre de la carpeta:
du | awk ''{print $2}''
Editar- Lo siento, mi mal. Pensé que solo se necesitaban carpetas. Dejaré esto aquí en caso de que alguien en el futuro lo necesite de todos modos ...
Muchas respuestas que veo. Esto es mío, y creo que es muy útil si está trabajando en Mac.
Estoy seguro de que sabes que hay algunos archivos "bundle" ( .app , .rtfd , .workflow , etc.). Y mirando la ventana de Finder parecen archivos únicos. Pero no lo son. Y $ ls
o $ find
véalos como directorios ... Entonces, a menos que necesite una lista de sus contenidos, esto funciona para mí:
find . -not -name ".*" -not -name "." | egrep -v "/.rtfd/|/.app/|/.lpdf/|/.workflow/"
Por supuesto, esto es para el directorio de trabajo, y podría agregar extensiones de otros paquetes (pero siempre con /
después de ellos). O cualquier otra extensión si no está agrupada sin el /
.
Más bien interesante el " .lpdf/
" (pdf multilingüe). Tiene la extensión normal " .pdf
" (!!) o ninguna en Finder. De esta manera obtienes (o solo cuenta 1 archivo) para este pdf
y no un montón de cosas ...
No lo hagas complicado. Acabo de usar esto y obtuve una hermosa salida:
ls -lR /path/I/need
No sé sobre la ruta completa, pero puede usar -R
para recursión. Por otra parte, si no estás empeñado en ls
, simplemente puedes find *
.
Oh, realmente una larga lista de respuestas. Ayudó mucho y finalmente creé por mi cuenta lo que estaba buscando:
Para listar todos los archivos en un directorio y sus subdirectorios:
find "$PWD" -type f
Para listar todos los directorios en un directorio y sus subdirectorios:
find "$PWD" -type d
Para listar todos los directorios y archivos en un directorio y sus subdirectorios:
find "$PWD"
Sabía el nombre del archivo pero también quería el directorio.
encontrar $ PWD | fgrep nombre de archivo
Funcionó perfectamente en Mac OS 10.12.1
Si el directorio se pasa como una ruta relativa y tendrá que convertirlo en una ruta absoluta antes de llamar a find. En el siguiente ejemplo, el directorio se pasa como el primer parámetro al script:
#!/bin/bash
# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory
Si realmente quiere usar ls
, entonces formatee su salida usando awk:
ls -R /path | awk ''
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }''
Usando comandos externos que no sean ls:
ls -R1 /path |
while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
Utilice encontrar:
find .
find /home/dreftymac
Si solo desea archivos (omitir directorios, dispositivos, etc.):
find . -type f
find /home/dreftymac -type f
encontrar / hará el truco
ls -lR
es lo que estabas buscando, o al menos lo era. aclamaciones
ls -ld $(find .)
Si desea ordenar su salida por hora de modificación:
ls -ltd $(find .)
du -a
Práctico para algunas carcasas limitadas de electrodomésticos donde no están disponibles las funciones de buscar / localizar
tar cf - $PWD|tar tvf -
Esto es lento pero funciona de forma recursiva e imprime directorios y archivos. Puede canalizarlo con awk / grep si solo desea los nombres de archivo sin todos los demás directorios / información:
tar cf - $PWD|tar tvf -|awk ''{print $6}''|grep -v "/$"