¿Cómo estoy usando el formato largo (-l) mientras sigo los enlaces simbólicos del directorio?

27

Me di cuenta de que ls -lno solo cambia el formato de la salida, sino también cómo se manejan los enlaces simbólicos del directorio:

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

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

Me gustaría obtener una lista detallada de lo que hay /rmn, no información sobre el /rmnenlace simbólico.

Una solución que se me ocurre es crear una función de shell que haga algo como esto:

cd /rmn
ls -l
cd -

Pero eso parece demasiado hacky, especialmente porque arruina el próximo uso de cd -. ¿Hay una mejor manera?

(Estoy en CentOS 2.6.9)

RomanSt
fuente
También me di cuenta de eso y busqué en Google para ver si alguien también se dio cuenta. Así es como vine aquí. :)
Yevgeniy Afanasyev

Respuestas:

27

Vea si su ls tiene las opciones:

 -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

Si eso no ayuda, puede hacer que su macro funcione sin perder el tiempo cd -haciendo:

(cd /rmn ; ls -l)

que se ejecuta en una subshell.

pjc50
fuente
-H, y eso hizo el truco. ¡Gracias!
RomanSt
44
Realmente desearía que --dereference-command-line-symlink-to-dirtuviera una forma corta.
wchargin
14

No entiendo por qué el pensamiento sobre este simple problema tiene que ser tan complejo, pero quizás acabo de responder la pregunta de manera incorrecta. De todos modos: cuando necesitaba una funcionalidad similar, usaba:

ls -lL

Eso hizo el truco en mi caso. Desde la lspágina del 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 ejemplo, me hice un /media/stickacceso directo para acceder a los datos en mi memoria USB. ls -l /media/stickmostrará el enlace real, mientras ls -lL /media/stickque mostrará el contenido en la memoria USB.

Después de una investigación más profunda sobre la diferencia entre el funcionamiento interno de -Hy -L, finalmente encontré un excelente artículo sobre este tema en el blog Shallow Thoughts (¡incluso con algunos trucos de script de shell para su placer!)

Esto señala las diferencias sutiles entre las dos opciones (¡mucho mejor que el manual original!) De la siguiente manera:

  • -H - solo desreferencia esos enlaces mencionados explícitamente en la línea de comando
  • -L- enlaces dereference incluso si están no mencionan en la línea de comandos

(Cuando estos dos se usan con tareas cotidianas simples , no debería haber diferencia en el resultado en general).

Además: si prefieres recordar la forma larga ( --option), lo más probable es que sea menos engorroso de memorizar --dereferenceque el monstruo excesivamente largo de --dereference-command-line-symlink-to-dir.

error de sintaxis
fuente
5
ls -l /rmn/

lo haría o

ls -l /rmn/.

Sin embargo, el comportamiento no debe ser diferente con y sin -l. ¿Tienes un alias para ls?

Stéphane Chazelas
fuente
3
lsLas banderas están locas. -lestablece el -Hvalor predeterminado en desactivado, como lo hace -F. Ver coreutils - Qué archivos están listados .
Mikel
@Mikel parece que tienes toda la razón al respecto. Y sí, eso es una locura. (también, no tengo un alias para ls, traté de escapar pero los resultados son los mismos)
RomanSt
De hecho, incluso lo especifica POSIX. Yo era el que tenía un ls='ls -F'alias en realidad.
Stéphane Chazelas