Come si usa il formato lungo (-l) mentre si seguono ancora i collegamenti simbolici della directory?


27

Ho notato che ls -lnon cambia solo la formattazione dell'output, ma anche come vengono gestiti i collegamenti simbolici delle directory:

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

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

Mi piacerebbe avere un elenco dettagliato di cosa c'è dentro /rmn, non informazioni sul /rmnlink simbolico.

Una soluzione che mi viene in mente è quella di creare una funzione shell che fa qualcosa del genere:

cd /rmn
ls -l
cd -

Ma questo sembra troppo confuso, soprattutto perché confonde il prossimo utilizzo di cd -. Esiste un modo migliore?

(Sono su CentOS 2.6.9)


L'ho notato anche e sono andato a cercare su Google se qualcuno lo notava. È così che sono venuto qui. :)
Yevgeniy Afanasyev il

Risposte:


27

Vedi se il tuo ls ha le opzioni:

 -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 quelli non ti aiutano, puoi far funzionare la tua macro senza sbagliare cd -facendo:

(cd /rmn ; ls -l)

che viene eseguito in una subshell.


Ha -H, e quello ha fatto il trucco. Grazie!
Roman,

4
Vorrei davvero che --dereference-command-line-symlink-to-diravesse una forma breve.
wchargin,

14

Non capisco bene perché il pensiero su questo semplice problema debba essere così complesso - ma forse ho appena fatto la domanda nel modo sbagliato. Comunque: quando avevo bisogno di una funzionalità simile, ho usato:

ls -lL

Questo ha funzionato nel mio caso. Dalla lspagina 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

Ad esempio, ho creato un /media/stickcollegamento per accedere ai dati sulla mia chiavetta USB. ls -l /media/stickmostrerà il collegamento effettivo, mentre ls -lL /media/stickmostrerà i contenuti sulla chiavetta USB.

Dopo alcune ricerche più approfondite sulla differenza tra i meccanismi interni di -He -L, alla fine mi sono imbattuto in un eccellente articolo su questo argomento sul blog di Shallow Thoughts (anche con alcuni trucchi di script shell per il tuo piacere!)

Ciò evidenzia le sottili differenze tra le due opzioni (molto meglio del manuale originale!) Come segue:

  • -H - Dereferenziare solo quei collegamenti esplicitamente menzionati nella riga di comando
  • -L- collegamenti dereference anche se sono non menzionati nella riga di comando

(Quando questi due vengono utilizzati con semplici compiti quotidiani, non dovrebbe esserci alcuna differenza nell'output in generale.)

Inoltre: se preferisci ricordare la forma lunga ( --option), molto probabilmente è meno complicato da memorizzare --dereferencerispetto al mostro eccessivamente lungo di --dereference-command-line-symlink-to-dir.


5
ls -l /rmn/

lo farebbe o

ls -l /rmn/.

Tuttavia, il comportamento non dovrebbe essere diverso con e senza -l. Hai un alias per ls?


3
lsle bandiere sono pazze. -lrende l' -Himpostazione predefinita off, così come -F. Vedi coreutils - Quali file sono elencati .
Mikel,

@Mikel sembra che tu abbia completamente ragione. E sì, è pazzesco. (inoltre, non ho un alias per ls, ho provato a scappare ma i risultati sono gli stessi)
RomanSt

In effetti è persino specificato da POSIX. In ls='ls -F'realtà ero quello con un alias.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.