Bagaimana cara menggunakan format panjang (-l) sambil tetap mengikuti symlink direktori?

27

Saya perhatikan bahwa ls -ltidak hanya mengubah format output, tetapi juga bagaimana symlink direktori ditangani:

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

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

Saya ingin mendapatkan daftar terperinci tentang apa yang ada di dalamnya /rmn, bukan informasi tentang /rmnsymlink.

Satu solusi yang dapat saya pikirkan adalah membuat fungsi shell yang melakukan sesuatu seperti ini:

cd /rmn
ls -l
cd -

Tapi itu tampaknya terlalu gila, terutama karena itu mengacaukan penggunaan selanjutnya cd -. Apakah ada cara yang lebih baik?

(Saya menggunakan CentOS 2.6.9)

RomanSt
sumber
Saya juga memperhatikan itu dan pergi googling untuk melihat apakah seseorang juga memperhatikan. Begitulah cara saya datang ke sini. :)
Yevgeniy Afanasyev

Jawaban:

27

Lihat apakah ls Anda memiliki opsi:

 -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

Jika itu tidak membantu, Anda dapat membuat pekerjaan makro Anda tanpa mengacaukan cd -dengan melakukan:

(cd /rmn ; ls -l)

yang berjalan dalam subkulit.

pjc50
sumber
Itu memang ada -H, dan itu berhasil. Terima kasih!
RomanSt
4
Saya benar-benar berharap itu --dereference-command-line-symlink-to-dirmemiliki bentuk pendek.
wchargin
14

Saya tidak mengerti mengapa pemikiran tentang masalah sederhana ini menjadi begitu rumit - tetapi mungkin saya hanya menjawab pertanyaan itu dengan cara yang salah. Anyways: ketika saya membutuhkan fungsi serupa, saya menggunakan:

ls -lL

Itu berhasil dalam kasus saya. Dari lshalaman 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

Sebagai contoh, saya telah membuat saya jalan /media/stickpintas untuk mengakses data pada stik USB saya. ls -l /media/stickakan menampilkan tautan yang sebenarnya, sementara ls -lL /media/stickakan menampilkan konten pada stik USB.

Setelah beberapa penelitian yang lebih mendalam tentang perbedaan antara inner -Hdan -L, saya akhirnya menemukan artikel yang bagus tentang hal ini di blog Dangkal Pikiran (bahkan menampilkan beberapa trik skrip shell rapi untuk kesenangan Anda!)

Ini menunjukkan perbedaan halus antara dua opsi (jauh lebih baik daripada manual asli!) Sebagai berikut:

  • -H - hanya dereferensi tautan-tautan yang secara eksplisit disebutkan di baris perintah
  • -L- tautan dereferensi meskipun tidak disebutkan pada baris perintah

(Ketika keduanya digunakan dengan tugas sehari-hari yang sederhana , seharusnya tidak ada perbedaan dalam output secara umum.)

Selain itu: Jika Anda lebih suka mengingat bentuk panjang ( --option), kemungkinan besar tidak rumit untuk dihafal --dereferencedaripada monster yang terlalu panjang --dereference-command-line-symlink-to-dir.

kesalahan sintaks
sumber
5
ls -l /rmn/

akan melakukannya atau

ls -l /rmn/.

Namun, perilaku itu seharusnya tidak berbeda dengan dan tanpa -l. Apakah Anda punya alias untuk ls?

Stéphane Chazelas
sumber
3
lsbendera itu gila. -lmembuat -Hdefault ke mati, seperti halnya -F. Lihat coreutils - File mana yang terdaftar .
Mikel
@ Kemungkinan tampaknya Anda benar tentang itu. Dan ya, itu gila. (juga, saya tidak memiliki alias untuk ls, mencoba melarikan diri tetapi hasilnya sama)
RomanSt
Memang itu bahkan ditentukan oleh POSIX. Saya adalah orang dengan ls='ls -F'alias sebenarnya.
Stéphane Chazelas