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


145

Eu tenho um link simbólico no meu /var/www/diretório que vincula ao WordPress. Quando executo o comando ls -lano /var/www/diretório, o link para o WordPress não aparece. Existe uma maneira de listar todos os links simbólicos que estão 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 "\->"

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?


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.


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



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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.