comando ls: ¿cómo puedo obtener una ruta completa recursiva lista, una línea por cada archivo?

StackOverflow https://stackoverflow.com/questions/1767384

  •  21-09-2019
  •  | 
  •  

Pregunta

¿Cómo puedo obtener ls para escupir una lista plana de recursivas caminos uno por línea?

Por ejemplo, sólo 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 trayectoria, quiero rutas completas.

¿Fue útil?

Solución

Si realmente desea utilizar ls, a continuación, formatee el uso de awk de salida:

ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'

Otros consejos

Uso encontrar:

find .
find /home/dreftymac

Si desea que sólo los archivos (omiten directorios, dispositivos, etc.):

find . -type f
find /home/dreftymac -type f

ls -ld $(find .)

Si desea ordenar la salida por hora de modificación:

ls -ltd $(find .)

Trate de la siguiente manera simple:

find "$PWD"

Mejor comando es: tree -fi

Con el fin de utilizar los archivos pero no los enlaces, usted tiene que quitar > de su salida:

tree -fi |grep -v \>

Si desea conocer la naturaleza de cada archivo, (para leer sólo los archivos ASCII, por ejemplo) con dos whiles:

tree -fi | \
grep -v \> | \
while read first ; do 
    file ${first}
done | \
while read second; do 
    echo ${second} | grep ASCII
done

¿Ah, sí una larga lista de respuestas. Me ayudó mucho y, por último, he creado mi propia lo que yo estaba buscando:

Para mostrar todos los archivos en un directorio y sus subdirectorios:

find "$PWD" -type f

Para una lista de todos los directorios de un directorio y sus subdirectorios:

find "$PWD" -type d

Para enumerar todos los directorios y archivos en un directorio y sus subdirectorios:

find "$PWD"

No sé sobre la ruta completa, pero se puede usar para -R recursividad. Alternativamente, si usted no está empeñado en ls, sólo puede hacer find *.

Sin usar comandos externos que no sean ls:

ls -R1 /path | 
  while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done

du -a

Es práctico para algunas conchas de electrodomésticos limitadas en las que se encuentran / localizan no están disponibles.

find / hará el truco

Creo que para una lista plana de la mejor manera es:

find -D tree /fullpath/to-dir/ 

(o con el fin de guardarlo en un archivo txt)

find -D tree /fullpath/to-dir/ > file.txt

No hacerlo complicado. Acabo de utilizar esto y tengo una hermosa salida:

ls -lR /path/I/need

La forma más fácil para todos ustedes futuras es simplemente:

du

Esto, sin embargo, también muestra cuál es el tamaño de contenido en cada carpeta Puede usar awk para emitir sólo el nombre de la carpeta:

du | awk '{print $2}'

Editar- sentimos lo siento, mi mal. Pensé que era sólo las carpetas que se necesitaban. Ill dejar esto aquí por si alguien en el futuro necesita de todos modos ...

Con tener la libertad de utilizar todas las opciones posibles ls:

find -type f | xargs ls -1

Ejecutar un comando de bash con el siguiente formato:

find /path -type f -exec ls -l \{\} \;

Esta es una respuesta parcial que muestra los nombres de directorio.

ls -mR * | sed -n 's/://p'

Explicación:

ls -mR * enumera los nombres de directorio completo que termina en un ':', a continuación, se enumeran los archivos de ese directorio separado

sed -n 's/://p' encuentra líneas que terminan en un colon, quitarse el colon e imprimir la línea

Por la iteración en la lista de directorios, debemos ser capaces de encontrar los directorios también. Aún Workin en él. Es un reto conseguir a través de los comodines xargs.

La adición de un comodín para el final de un directorio ls fuerzas rutas completas. En este momento usted tiene esto:

$ ls /home/dreftymac/
foo.txt
bar.txt
stackoverflow
stackoverflow/alpha.txt
stackoverflow/bravo.txt
stackoverflow/charlie.txt

Usted puede hacer esto en su lugar:

$ ls /home/dreftymac/*
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow:
alpha.txt
bravo.txt
charlie.txt

Desafortunadamente esto no se imprime la ruta completa para los directorios en recursed, por lo que puede no ser la solución completa que usted está buscando.

ls -lR es lo que estabas buscando, o al menos lo era. aplausos

Una gran cantidad de respuestas que veo. Esto es mío, y creo que bastante útil si se está trabajando en Mac.

Estoy seguro de que sabe que hay algunos archivos "paquete" ( .app , .rtfd , .workflow , etc. ). Y mirando a la ventana del buscador de archivos que parecen simples. Pero no lo son. Y $ ls o $ find los ven como directorios ... Por lo tanto, a menos que necesite una lista de sus contenidos, así, 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 se puede agregar extensiones de otros paquetes (pero siempre con un / después de ellos). O cualquier otra extensión si no se lían de sin el /.

En lugar interesante el ".lpdf/" (pdf multilingüe). Tiene extensión normal ".pdf" (!!) o ninguno en el Finder. De esta manera se obtiene (o que sólo cuenta con 1 archivo) para este pdf y no un montón de cosas ...

Si el directorio se pasa como una ruta relativa y se necesita para convertirlo en una ruta absoluta antes de llamar hallazgo. En el siguiente ejemplo, el directorio se pasa como el primer parámetro de la secuencia de comandos:

#!/bin/bash

# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory
tar cf - $PWD|tar tvf -             

Esto es lento, pero funciona de forma recursiva e imprime ambos directorios y archivos. Se puede canalizar con awk / grep si sólo desea que los nombres de archivo sin todos los Otros / directorios:

tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"          

@ ghostdog74: Pequeño arreglo con su solución.
Siguiente código se puede utilizar para buscar el archivo 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]

Yo sabía que el nombre del archivo, pero quería que el directorio.

encontrar $ PWD | fgrep nombre de archivo

funcionaba perfectamente en Mac OS 10.12.1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top