Bagaimana menemukan semua tautan lunak (tautan simbolik) di direktori saat ini?


10

Pertanyaan terkait dengan skrip shell di bash.

Bagaimana cara memeriksa dengan skrip file mana dalam direktori saat ini yang merupakan tautan lunak?

Jika saya menggunakan istilah yang salah, ketika saya mengatakan tautan lunak , saya merujuk ke file yang dibuat menggunakan ln -s.

Satu-satunya hal yang berhasil saya pikirkan adalah mengevaluasi ls -lasebagai ekspresi, dan menguraikan hasilnya, tetapi jelas ini bukan solusi terbaik.


1
Mereka disebut sebagai "tautan simbolik" (sebagai lawan dari "tautan keras").
Dijeda sampai pemberitahuan lebih lanjut.

Righto, saya tahu saya mungkin salah istilah, terima kasih untuk kepala
bguiz

Tautan lunak juga baik-baik saja, tetapi dengan spasi. :-) ( en.wikipedia.org/wiki/Symbolic_link )
Arjan

Jawaban:



14

Anda mungkin tidak benar-benar membutuhkan skrip. Untuk menampilkan tautan simbolik apa saja di folder saat ini, tanpa berulang ke folder anak apa pun:

Temukan . -maxdepth 1 -type l -print

Atau, untuk mendapatkan info lebih lanjut, gunakan salah satu dari:

Temukan . -maxdepth 1 -type l -exec ls -ld {} +
Temukan . -maxdepth 1 -type l -print0 | xargs -0 ls -ld

Untuk mengetahui apakah suatu file adalah tautan simbolik, seseorang dapat menggunakan readlink, yang tidak akan menghasilkan apa-apa jika itu bukan tautan simbolik. Contoh berikut tidak cukup berguna, tetapi menunjukkan bagaimana readlinkmengabaikan file dan folder normal. Gunakan salah satu dari:

Temukan . -maxdepth 1 -exec readlink {} +
Temukan . -maxdepth 1 -print0 | xargs -0 readlink

Perhatikan bahwa di atas -exec ... +dan xargs ...jauh lebih cepat daripada -exec ... \;. Suka:

waktu temukan / usr / bin -maxdepth 1 -type l -exec ls -ld {} \;
0m0.372s nyata
pengguna 0m0.087s
sys 0m0.163s

waktu temukan / usr / bin -maxdepth 1 -type l -exec ls -ld {} +
0m0.013s nyata
pengguna 0m0.004s
sys 0m0.008s

waktu temukan / usr / bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld
0m0.012s nyata
pengguna 0m0.004s
sys 0m0.009s

Saya lebih suka jawaban Polsy, masih +1 untuk Anda, karena saya mungkin perlu melakukannya di luar skrip shell suatu hari.
bguiz

1
Anda tidak perlu xargs. Anda bisa menggunakan find. -maxdepth 1 -exec readlink {} \;
stib

Benar, @stib, tetapi xargsadalah banyak lebih cepat pada Mac saya; lihat hasil edit saya. Tapi saya belajar sesuatu yang baru hari ini: ada juga +alih-alih \;(Meskipun beberapa orang mengklaim bahwa ini memiliki / memiliki masalah dengan grep).
Arjan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.