Liste des liens symboliques dans le répertoire actuel?


8

Cette question concerne la recherche de répertoires dans un répertoire courant. La solution est essentiellement:

ls -d */

C'est très bien, mais comment puis-je facilement lister les liens symboliques? Dois-je utiliser quelque chose comme

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

Ou existe-t-il un moyen plus simple? Peut-on utiliser ls pour cela?


Sur mon système Ubuntu, un rapide coup d'œil à ses man findspectacles qui -dest synonyme de -depth(pour compatibilité avec FreeBSD, NetBSD, MacOS X et OpenBSD.), Ie. ce n'est pas la même chose que -maxdepth. . . -depth Traitez le contenu de chaque répertoire avant le répertoire lui
Peter.O

Réponses:


9

En zsh (ajoutez Nà l'intérieur des parenthèses pour inclure les liens symboliques dont le nom commence par a .):

echo *(@)

Avec la plupart des findimplémentations:

find -maxdepth 1 -type l

Conforme à POSIX:

find . -type d \! -name . -prune -o -type l -print

Ou avec une boucle shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
Pour l' -pruneoption, vous devez utiliser find topdir ! -name topdir -prune; sinon, le répertoire de départ est également ignoré.
Arcege

6

Ce n'est pas sur un Mac, mais

find . -maxdepth 1 -type l

travaille pour moi.


3

Vous devez utiliser -typeet non -xtype:

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

La valeur par défaut est -P, donc l'option -xtype essaiera de déterminer le fichier résultant, pas le lien symbolique lui-même. En fait, j'obtiens des résultats positifs, ce qui semble être un bug. Le -P -xtype ldevrait retourner vrai (sur un lien symbolique) si la résultante est elle-même un lien symbolique.

Peut également utiliser: ls -FA | sed -ne 's/@//p'qui affichera uniquement les liens symboliques.


belle solution ls
frogstarr78

2
sed -ne 's/@//p'(et même sed -ne 's/@$//p') n'est pas un test sécurisé, car la première version donnera un faux positif lorsqu'il @se produit n'importe où dans la sortie ls , et la seconde renverra un faux positif lorsqu'un nom de fichier se termine réellement@
Peter.O

1

Pour découvrir uniquement les fichiers qui sont des liens symboliques dans le répertoire courant:

find . -type l -printf '%p -> %l\n'

Cela listera récursivement tous les fichiers de liens symboliques. En outre, il affiche les fichiers réels vers lesquels il pointe.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.