Enumere recursivamente todos los archivos en un directorio, incluidos los archivos en directorios de enlaces simbólicos

147

Supongamos que tengo un directorio /dirdentro de la cual hay 3 enlaces simbólicos a otros directorios /dir/dir11, /dir/dir12y /dir/dir13. Quiero enumerar todos los archivos, dirincluidos los de dir11, dir12y dir13.

Para ser más genérico, quiero enumerar todos los archivos, incluidos los de los directorios que son enlaces simbólicos. find ., ls -R, Etc parada en el enlace simbólico sin tener que navegar en ellos a la lista de más.

CuriousDawg
fuente

Respuestas:

232

La -Lopción de lslograr lo que quieres. Hace referencia a enlaces simbólicos.

Entonces su comando sería:

ls -LR

También puedes lograr esto con

find -follow

La -followopción dirige buscar para seguir enlaces simbólicos a directorios.

En el uso de Mac OS X

find -L

como -followha quedado en desuso.

Michael Ridley
fuente
14
-follow está en desuso a favor de -L en las versiones más recientes de find.
pjz
@pjz: ¿hay una referencia cruzada para '-follow en desuso; use -L '? Para mi gran sorpresa, encontré '-L' y '-H' en la lista del estándar POSIX / SUS en opengroup.org/onlinepubs/009695399/toc.htm , y aún más para mi sorpresa no '-follow', Entonces respondí mi propia pregunta.
Jonathan Leffler
Esto no funcionó para mí. primero no pasó nada, luego lo intenté con -follow- y dijo que no podía encontrar la carpetaollow
smatthewenglish
44
En OS X 10.10 esto funciona: find -L .- Estaba teniendo el mismo problema que @ S.Matthew_English
fregante
Su respuesta es buena, pero followsolo quiero archivar las rutas (ruta completa al archivo) y no la ruta del directorio, ¿cómo puedo hacerlo?
Vicky Dev
116

¿Qué tal el árbol ? tree -lseguirá los enlaces simbólicos.

Descargo de responsabilidad : escribí este paquete.

Steve Baker
fuente
2
¿Qué tal un paquete de arco?
Mr_and_Mrs_D
Esta es una vista más intuitiva que ls. También es más fácil de pegar.
dhaupin
46
find /dir -type f -follow -print

-type f significa que mostrará archivos reales (no enlaces simbólicos)

-follow significa que seguirá los enlaces simbólicos de tu directorio

-print hará que muestre los nombres de archivo.

Si desea una pantalla tipo ls, puede hacer lo siguiente

find /dir -type f -follow -print|xargs ls -l
dvorak
fuente
esto produce una pantalla más bonita que la ls -Lopción
eusoubrasileiro
10

Usando ls:

  ls -LR

de 'man ls':

   -L, --dereference
          when showing file information for a symbolic link, show informa‐
          tion  for  the file the link references rather than for the link
          itself

O, usando find:

find -L .

Desde la página de manual de búsqueda:

-L     Follow symbolic links.

Si encuentra que solo quiere seguir algunos enlaces simbólicos (como quizás solo los de nivel superior que mencionó), debe mirar la opción -H, que solo sigue los enlaces simbólicos que le pasa en la línea de comandos.

pjz
fuente
5

Sabía que treeera apropiado, pero no tenía el árbol instalado. Entonces, tengo una alternativa bastante cercana aquí

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'
divinedragon
fuente
Esto era exactamente lo que necesitaba. Gracias.
Scott C
5
find -L /var/www/ -type l

# man find
-L     Follow  symbolic links.  When find examines or prints information about files, the information used shall be taken from the

propiedades del archivo al que apunta el enlace, no desde el enlace en sí mismo (a menos que sea un enlace simbólico roto o find no pueda examinar el archivo al que apunta el enlace). El uso de esta opción implica -noleaf. Si luego usa la opción -P, -noleaf seguirá vigente. Si -L está vigente y encuentra descubre un enlace simbólico a un subdirectorio durante su búsqueda, se buscará el subdirectorio señalado por el enlace simbólico.

Ashwin Muni
fuente
2
ls -R -L

-Ldesreferencias enlaces simbólicos. Sin embargo, esto también hará que sea imposible ver los enlaces simbólicos a los archivos: se verán como el archivo señalado.

Branan
fuente
-1

en caso de que desee imprimir todo el contenido del archivo : find . -type f -exec cat {} +

qrtLs
fuente