Como listar todos os links simbólicos em um diretório

Respostas:

80

Você pode usar grepcom o lscomando para listar todos os links simbólicos presentes no diretório atual.

Isso listará todos os links presentes no diretório atual.

ls -la /var/www/ | grep "\->"
g_p
fonte
5
Ele retornará falso positivo se você tiver um arquivo contendo " ->". Tente um simples #touch "foo->"
394 Sylvain Pineau
7
não copie e cole o conteúdo de outra resposta para sua própria resposta. -1
αғsнιη 10/09
3
por que não grepusar ^l?
Eliran Malka
3
Como de costume, a melhor resposta é a que tem maior +
FractalSpace
Agradável! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
284

A análise lsé uma Bad Idea ® ; prefira uma simples findnesse caso:

find . -type l -ls

Para processar apenas o diretório atual:

find . -maxdepth 1 -type l -ls

Créditos: Como faço para o shell reconhecer os nomes de arquivos retornados por um comando `ls -A`, e esses nomes contêm espaços?

Sylvain Pineau
fonte
find: Unknown argument to -type: 1
Ahnbizcad 28/05
15
@ahnbizcad: Não é 1(um) mas l(link) #
Sylvain Pineau 28/15
3
Ótima resposta! Ajustei o meu para não descer o caminho do diretório assim: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Obrigado!
bgs
3
Somente para o diretório atual (ou seja, não recursivo ), adicione -maxdepth 1.
Joshua Pinter
11
@ cig0 vc não precisa usar awk, vc provavelmente quer exatamente isso:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

o ls -lacomando mostrar todos os arquivos e pastas e também o diretório vinculado simbólico; se esse comando não mostrar nenhum diretório simbólico, significa que você não possui um link simbólico para o WordPress .

veja o resultado da execução ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Você verá que todo diretório simbólico tem lpermissão no início dos sinalizadores de permissões. e se você levar um grep, ^lpoderá listar apenas arquivos ou diretórios simbólicos:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

O driver e o diretório do subsistema são um link simbólico para outro diretório aqui.

αғsнιη
fonte
11
Menor especificação aqui ... o primeiro caractere da cadeia de permissões não é realmente uma permissão. É o tipo de arquivo. Como você disse, lsignifica que é um link simbólico.
precisa saber é o seguinte
5

grep é seu amigo:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

Isso listará as linhas que começam com "l", que representam os Links na coluna perms no lugar de luso dpara diretórios e -arquivos

Kalibur
fonte
3

POSIXly:

find ! -name . -prune -type l
cuonglm
fonte
1

Para visualizar os links simbólicos em um diretório:

  1. Abra um terminal e vá para esse diretório.

  2. Digite o comando:

    ls -la
    

    Isso deve listar todos os arquivos no diretório, mesmo que estejam ocultos.

  3. Os arquivos que começam com lsão seus arquivos de link simbólico.

sandeep srivastav vaddiparthy
fonte
11
-1: A resposta da KasiyA já cobre isso.
muru 10/09/14
1

Isso retorna todos os itens simbolicamente vinculados (dirs e fns) em um diretório:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

No entanto, para distinguir entre tipos de itens vinculados simbolicamente reais:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Retorna apenas itens de nome de arquivo simbolicamente vinculados. E,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Retorna apenas itens de dirname simbolicamente vinculados.

odoncaoa
fonte
0

Digite ls -lai, ele listará todos os arquivos e subdiretórios com os números de inode correspondentes. Você sabe que os arquivos com o mesmo número de inode são os links (físicos ou virtuais) e esta solução também funciona para os links simbólicos.

saptarshi nag
fonte
ls -laique não mostram o mesmo número inode de um arquivo e seus links simbólicos. Diferentemente dos links físicos, os links simbólicos têm suas próprias entradas de inode separadas. Isto é o que parece.
Eliah Kagan 12/09
0

Também pode ser feito com python:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Exemplo de execução:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

Isso pode ser estendido para ser recursivo via os.walkfunção, mas é suficiente usar a geração simples de lista para listar links em um único diretório, como mostrei acima.

Sergiy Kolodyazhnyy
fonte