Para uso em um shell-script, estou procurando uma maneira de linha de comando para obter o destino de um link simbólico. O mais próximo que eu cheguei até agora é o stat -N src
resultado src -> dst
. É claro que eu poderia analisar a saída e obter dst
, mas gostaria de saber se existe alguma maneira direta de obter o destino.
command-line
symlink
gerrit
fonte
fonte
readlink -f
se você deseja conhecer o último destino do link simbólico e não apenas o próximo .-f
é uma extensão não portátil para o GNUreadlink
.No Mac OS X e FreeBSD / NetBSD / etc. Está:
Mais genericamente, acho que a solução é (stat --printf =% N usa aspas estranhas):
Exemplo:
Outro método é:
A última linha é desconfigurada porque não possui nova linha, mas tudo bem se você precisar do resultado em uma variável, como
O
-maxdepth
é necessário para evitarfind
a partir descendente em diretórios seb
passa a ser um diretório.fonte
stat --printf='%N\n'
é exatamente o que eu quero, citações estranhas não me incomoda, suas as mesmas citações Rm e uso --interactive lnlink -> dest
na saída. O (1) solução achado deve ser verificado se é com findutils GNU ou de outra forma ...echo $f
certamente não produz o que você espera quando o link simbólico aponta para/*
(sim, é possível)Isso pode ser feito usando o GNU
find
:find src -prune -printf "%l\n"
.fonte
Portably: sem sorte, exceto usando heurísticas para analisar a saída ls -l ou usar
perl -le 'print readlink("some-file")'
alguns sistemas têm um
readlink
comando, alguns com uma-f
opção para obter o caminho absoluto.Existem várias implementações de um
stat
comando como um wrapper para as chamadasstat
/lstat
system. O GNU one não é útil nesse sentido, mas o built-in do zsh é mais:Ainda com o zsh, você pode obter o caminho absoluto de um arquivo (remove todos os componentes do link simbólico) com o
:A
modificador (aplica-se à expansão variável, expansão de histórico e globbing:fonte
Em um sistema em que não tenho
readlink
ou não tenhostat
comandos, mas tenho o Python 2.x, estou usando um script curto:Observe que, diferentemente
readlink -f
disso, pode seguir apenas um nível de link simbólico.fonte
Caminho real portátil do Bash puro
fonte
realpath
comando docoreutils
pacote,conforme vinculado na
readlink
página de manual do comando.por exemplo:
saídas
na minha máquina.
fonte