2008-09-19 39 views
102

Supongamos que tengo un directorio /dir en cuyo interior hay 3 enlaces simbólicos a otros directorios /dir/dir11, /dir/dir12 y /dir/dir13. Quiero enumerar todos los archivos en dir incluyendo los que están en dir11, dir12 y dir13.lista LINUX recursivamente todos los archivos en un directorio incluyendo los archivos en directorios de enlaces simbólicos

Para ser más genérico, quiero enumerar todos los archivos, incluidos los que están en los directorios que son enlaces simbólicos. find ., ls -R, etc. para en el enlace simbólico sin navegar en ellos para listar más.

+0

duplicado posible de [Cómo sólo para obtener el nombre del archivo con Linux \ 'Encontrar \'?] (Http://stackoverflow.com/questions/5456120/how-to -only-get-file-name-with-linux-find) –

Respuesta

157

La opción -L de ls logrará lo que desea. Desreferencia enlaces simbólicos.

Así que su comando sería:

ls -LR 

También puede lograr esto con

find -follow 

La opción -follow dirige encontrar seguir enlaces simbólicos a directorios.

En Mac OS X utilizan

find -L 

como -follow ya no se utiliza.

+10

-follow está en desuso en favor de -L en las versiones más recientes de find. – pjz

+0

@pjz: hay una referencia cruzada para '-simple obsoleto; usar -L '? Para mi gran sorpresa, encontré '-L' y '-H' enumerados en el estándar POSIX/SUS en http://www.opengroup.org/onlinepubs/009695399/toc.htm, y aún más para mi sorpresa no '-follow', entonces respondí mi propia pregunta. –

+0

esto no funcionó para mí. primero no pasó nada, intenté con '-follow'- y dijo que no podía encontrar la carpeta' ollow' –

7

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, utilizando hallazgo:

find -L . 

Desde el hallazgo página de manual:

-L  Follow symbolic links. 

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

35
find /dir -type f -follow -print 

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

-follow significa que seguirá sus enlaces simbólicos directorio

-print hará que se muestre los nombres de archivo.

Si desea una presentación del tipo de ls, puede hacer lo siguiente

find /dir -type f -follow -print|xargs ls -l 
+0

bueno, esto funciona genial –

+0

Esto también funciona bien en OS X –

+0

esto produce una pantalla más bonita que la opción 'ls -L' – eusoubrasileiro

2
ls -R -L 

-L desreferencias enlaces simbólicos. Sin embargo, esto también hará que sea imposible ver cualquier enlace simbólico a los archivos, se verán como el archivo apuntado.

97

¿Qué tal tree? tree -l seguirá los enlaces simbólicos.

Descargo de responsabilidad: Escribí este paquete.

+41

upvoted para escribir y poner a disposición el software genial:) – mit

+2

¿Qué tal un paquete de arco? –

+0

@Mr_and_Mrs_D pacman -S extra/tree – etherous

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 de el archivo al que apunta el enlace, no desde el propio enlace (a menos que sea un enlace simbólico roto o encontrar es incapaz de examinar el archivo a el que el enlace puntos). El uso de esta opción implica -noleaf. Si luego usa la opción -P, -noleaf aún estará en efecto. Si -L es en vigor y find descubre un enlace simbólico a un subdirectorio durante su búsqueda, se buscará en el subdirectorio apuntado por el enlace simbólico .

2

Sabía que tree era apropiado, pero no tenía árbol instalado. Por lo tanto, tengo una alternativa bastante cerca here

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/' 
+0

Esto era exactamente lo que necesitaba. Gracias. –

Cuestiones relacionadas