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.


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.


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.


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

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.


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/--/ |-/'

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.


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.


-1

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.