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?

cwd
la source
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
Gilles 'SO- arrête d'être méchant'
la source
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.

frogstarr78
la source
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.

Arcege
la source
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.

pervenche1
la source