Como ls usando o formato longo (-l) enquanto ainda segue os links simbólicos do diretório?

23

Percebi que ls -l não altera apenas a formatação da saída, mas também como os links simbólicos de diretório são manipulados:

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

Gostaria de obter uma lista detalhada do que está em /rmn , não informações sobre o link simbólico /rmn .

Uma alternativa que posso imaginar é criar uma função de shell que faça algo assim:

cd /rmn
ls -l
cd -

Mas isso parece muito hacky, especialmente porque isso atrapalha o próximo uso de cd - . Existe uma maneira melhor?

(estou no CentOS 2.6.9)

    
por RomanSt 20.11.2012 / 13:16

3 respostas

22

Veja se o seu ls tem as opções:

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

Se isso não ajudar, você poderá fazer a macro funcionar sem atrapalhar cd - fazendo:

(cd /rmn ; ls -l)

que é executado em uma subcamada.

    
por 20.11.2012 / 14:14
12

Eu não entendo bem por que o pensamento sobre este problema simples tem que ser tão complexo - mas talvez eu tenha acabado de fazer a pergunta do jeito errado. De qualquer forma: quando eu precisava de uma funcionalidade semelhante, usei:

ls -lL

Isso fez o truque no meu caso. Na página ls man:

-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself

Por exemplo, eu criei um atalho /media/stick para acessar os dados no meu pendrive. ls -l /media/stick mostrará o link real, enquanto ls -lL /media/stick mostrará os conteúdos no pendrive.

Após uma pesquisa mais profunda sobre a diferença entre o funcionamento interno de -H e -L , finalmente encontrei um excelente artigo sobre esse assunto em Slowow Thoughts (até mesmo apresentando alguns truques de script de shell para o seu prazer!)

Isso aponta as diferenças sutis entre as duas opções (melhor do que o manual original faz!) como segue:

  • -H - somente desreferencia os links explicitamente mencionados na linha de comando
  • -L - links de referência, mesmo que não sejam mencionados na linha de comando

(Quando estes dois são usados com tarefas diárias simples, não deve haver diferença na saída em geral).

Além disso: Se você preferir lembrar-se da forma longa ( --option ), provavelmente é menos complicado memorizar --dereference do que o monstro excessivamente longo de --dereference-command-line-symlink-to-dir .

    
por 03.09.2013 / 23:57
5
ls -l /rmn/

faria isso ou

ls -l /rmn/.

No entanto, o comportamento não deve ser diferente com e sem -l . Você tem um alias para ls ?

    
por 20.11.2012 / 14:16

Tags