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.
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.
Que diriez-vous de arbre ? tree -l
suivra les liens symboliques.
Disclaimer: J'ai écrit ce paquet.
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
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.
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é.
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/--/ |-/'
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é.
au cas où vous souhaiteriez imprimer tous les fichiers contenus : find . -type f -exec cat {} +