web-dev-qa-db-fra.com

LINUX Liste de manière récursive tous les fichiers d'un répertoire, y compris ceux de répertoires symlink

Supposons que j'ai un répertoire /dir dans lequel se trouvent 3 liens symboliques vers d'autres répertoires /dir/dir11, /dir/dir12 et /dir/dir13. Je veux lister tous les fichiers dans dir y compris ceux dans dir11, dir12 et dir13.

Pour être plus générique, je veux lister tous les fichiers, y compris ceux dans les répertoires qui sont des liens symboliques. find ., ls -R, etc., arrêtez-vous sur le lien symbolique sans naviguer dans ceux-ci pour en dresser la liste.

118
CuriousDawg

L'option -L à ls accomplira ce que vous voulez. Il déréférence des liens symboliques.

Donc, votre commande serait:

ls -LR

Vous pouvez également accomplir cela avec

find -follow

L'option -follow demande à find de suivre les liens symboliques vers les répertoires.

Sous Mac OS X, utilisez

find -L

comme -follow est obsolète.

187
Michael Ridley

Que diriez-vous de arbre ? tree -l suivra les liens symboliques.

Disclaimer: J'ai écrit ce paquet.

107
Steve Baker
find /dir -type f -follow -print

-type f signifie qu'il affichera de vrais fichiers (et non des liens symboliques)

-follow signifie qu'il suivra les liens symboliques de votre répertoire

-print le fera afficher les noms de fichiers.

Si vous voulez un affichage de type ls, vous pouvez effectuer les opérations suivantes:

find /dir -type f -follow -print|xargs ls -l
43
dvorak

Utilisation de ls:

  ls -LR

de 'homme 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

Ou, en utilisant find:

find -L .

De la page de manuel find:

-L     Follow symbolic links.

Si vous souhaitez suivre uniquement les quelques liens symboliques (comme peut-être uniquement ceux de niveau supérieur que vous avez mentionnés), vous devriez regarder l'option -H, qui ne fait que suivre les liens symboliques que vous lui transmettez sur la ligne de commande.

8
pjz
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

propriétés de le fichier vers lequel pointe le lien, pas à partir du lien lui-même (sauf s'il s'agit d'un lien symbolique brisé ou que find est incapable de examiner le fichier en auquel le lien est dirigé). L'utilisation de cette option implique -noleaf. Si vous utilisez ultérieurement l'option -P, -noleaf sera toujours en vigueur. Si -L est en effet et find découvre un lien symbolique vers un sous-répertoire lors de sa recherche, le sous-répertoire désigné par le lien symbolique sera être recherché.

5
Ashwin Muni

Je savais que tree était approprié, mais je n’ai pas installé d’arbre. Donc, j'ai un remplaçant assez proche ici

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'
3
divinedragon
ls -R -L

-L supprime les liens symboliques. Cela rendra également impossible de voir des liens symboliques vers des fichiers - ils ressembleront au fichier indiqué.

2
Branan

au cas où vous souhaiteriez imprimer tous les fichiers contenus : find . -type f -exec cat {} +

0
ItsmeJulian