Listar links simbólicos no diretório atual?

8

Esta pergunta fala sobre como encontrar diretórios em um diretório atual. A solução é basicamente:

ls -d */

Isso é ótimo, mas como posso facilmente listar links simbólicos? Eu tenho que usar algo como

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

Ou existe um caminho mais facil? Posso ser usado para isso?

cwd
fonte
No meu sistema Ubuntu, uma rápida olhada em seus man findprogramas -dé sinônimo de -depth(para compatibilidade com FreeBSD, NetBSD, MacOS X e OpenBSD.), Ou seja. não é o mesmo que -maxdepth. . . -depth Processar o conteúdo de cada diretório antes do diretório em si
Peter.O

Respostas:

9

No zsh (adicione Nentre parênteses para incluir links simbólicos cujo nome começa com a .):

echo *(@)

Com a maioria das findimplementações:

find -maxdepth 1 -type l

Compatível com POSIX:

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

Ou com um loop de shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done
Gilles 'SO- parar de ser mau'
fonte
1
Para a -pruneopção, você precisa usar find topdir ! -name topdir -prune; caso contrário, o diretório inicial também será ignorado.
Arcege 4/10/11
6

Isso não está em um Mac, mas

find . -maxdepth 1 -type l

funciona para mim.

frogstarr78
fonte
3

Você deve estar usando -typee não -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.

O padrão é que -P, portanto, a opção -xtype tentará determinar o arquivo resultante, não o link simbólico em si. Na verdade, eu recebo alguns resultados positivos, o que parece um bug. O -P -xtype lretorno deve ser verdadeiro (em um link simbólico) se o resultante for um link simbólico.

Também pode usar: ls -FA | sed -ne 's/@//p'que exibirá apenas os links simbólicos.

Arcege
fonte
agradáveis ls solução
frogstarr78
2
sed -ne 's/@//p'(e mesmo sed -ne 's/@$//p') não é um teste seguro, pois a primeira versão dará um falso positivo quando @ocorrer em qualquer lugar na saída ls , e a segunda retornará uma falsa positiva quando um nome de arquivo realmente terminar em@
Peter
1

Para descobrir apenas os arquivos que são links simbólicos dentro do diretório atual:

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

Isso listará recursivamente todos os arquivos de link simbólico. Além disso, mostra os arquivos reais para os quais aponta.

pervinca1
fonte