Lista links simbólicos no diretório atual?

8

This pergunta fala sobre encontrar diretórios em uma diretoria atual. A solução é basicamente:

ls -d */

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

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

Ou há uma maneira mais fácil? Posso ser usado para isso?

    
por cwd 04.10.2011 / 05:02

4 respostas

9

Em zsh (adicione N dentro dos parênteses para incluir links simbólicos cujo nome começa com . ):

echo *(@)

Com a maioria das implementações de find :

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
    
por 04.10.2011 / 09:09
6

Isso não está no Mac, mas

find . -maxdepth 1 -type l

funciona para mim.

    
por 04.10.2011 / 05:55
3

Você deve usar -type e 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 é -P , então a opção -xtype tentará determinar o arquivo resultante, não o próprio link simbólico. Na verdade, eu recebo alguns resultados positivos, o que parece um erro. O -P -xtype l deve retornar true (em um symlink) se o resultante for ele mesmo um link simbólico.

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

    
por 04.10.2011 / 05:54
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 links simbólicos. Além disso, mostra os arquivos reais para os quais aponta.

    
por 04.10.2011 / 10:41

Tags