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

27

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

> 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 /rmnconteúdo, não informações sobre o /rmnlink simbólico.

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

cd /rmn
ls -l
cd -

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

(Estou no CentOS 2.6.9)

RomanSt
fonte
Também notei isso e fui pesquisar no Google para ver se alguém também notou. Foi assim que vim aqui. :)
Yevgeniy Afanasyev

Respostas:

27

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ê pode fazer sua macro funcionar sem estragar cd -fazendo:

(cd /rmn ; ls -l)

que é executado em um subshell.

pjc50
fonte
Tem -H, e isso fez o truque. Obrigado!
RomanSt
4
Eu realmente gostaria que --dereference-command-line-symlink-to-dirtivesse uma forma curta.
precisa saber é
14

Não entendo por que o pensamento sobre esse problema simples tem que ser tão complexo - mas talvez eu tenha entendido a pergunta da maneira errada. Enfim: quando eu precisava de uma funcionalidade semelhante, eu usava:

ls -lL

Isso fez o truque no meu caso. Na lspágina do manual:

-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, criei um /media/stickatalho para acessar os dados no meu pen drive. ls -l /media/stickmostrará o link real, enquanto ls -lL /media/stickmostrará o conteúdo no pen drive.

Depois de uma pesquisa mais profunda sobre a diferença entre o funcionamento interno de -He -L, finalmente encontrei um excelente artigo sobre esse assunto no blog Shallow Thoughts (mesmo apresentando alguns truques de script de shell para seu prazer!)

Isso aponta as diferenças sutis entre as duas opções (muito melhores que o manual original!) Da seguinte maneira:

  • -H - desreferenciar apenas os links mencionados explicitamente na linha de comando
  • -L- links dereference mesmo que sejam não mencionados na linha de comando

(Quando esses dois são usados ​​com tarefas cotidianas simples , não deve haver diferença na saída em geral.)

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

erro de sintaxe
fonte
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 apelido para ls?

Stéphane Chazelas
fonte
3
lsbandeiras são loucas. -ltorna o -Hpadrão desativado, assim como -F. Veja coreutils - Quais arquivos estão listados .
22412 Mikel
@ Mikel, parece que você está completamente certo sobre isso. E sim, isso é loucura. (também, eu não tenho um alias para ls, tentou escapar, mas os resultados são os mesmos)
RomanSt
Na verdade, é especificado até pelo POSIX. Eu era o único com um ls='ls -F'apelido, na verdade.
Stéphane Chazelas