Secara rekursif mendaftarkan semua file dalam direktori termasuk file dalam direktori symlink


147

Misalkan saya memiliki sebuah direktori /dirdalam yang ada 3 symlink ke direktori lain /dir/dir11, /dir/dir12dan /dir/dir13. Saya ingin membuat daftar semua file dirtermasuk yang ada dalam dir11, dir12dan dir13.

Agar lebih umum, saya ingin membuat daftar semua file termasuk yang ada di direktori yang merupakan symlink. find .,, ls -Rdll berhenti di symlink tanpa menavigasi ke mereka untuk mendaftar lebih lanjut.


Jawaban:


232

The -Lpilihan untuk lsakan mencapai apa yang Anda inginkan. Ini referensi tautan simbolik.

Jadi perintah Anda adalah:

ls -LR

Anda juga dapat menyelesaikan ini dengan

find -follow

The -followpilihan mengarahkan menemukan untuk mengikuti link simbolik ke direktori.

Di Mac OS X gunakan

find -L

seperti yang -followsudah ditinggalkan.


14
-Ikut tidak disukai demi -L dalam versi find yang lebih baru.
pjz

@pjz: apakah ada referensi silang untuk '-ikuti tidak berlaku; gunakan -L '? Agak mengherankan saya, saya menemukan '-L' dan '-H' terdaftar dalam standar POSIX / SUS di opengroup.org/onlinepubs/009695399/toc.htm , dan bahkan lebih mengejutkan saya, tidak ada '-follow', jadi saya menjawab pertanyaan saya sendiri.
Jonathan Leffler

ini tidak berhasil untuk saya. pertama tidak ada yang terjadi kemudian saya coba -follow- dan dikatakan tidak menemukan folderollow
smatthewenglish

4
Pada OS X 10.10 ini berfungsi: find -L .- Saya mengalami masalah yang sama dengan @ S.Matthew_English
fregante

Jawaban Anda bagus, tetapi saya followhanya ingin path file (path lengkap ke file) dan bukan path direktori, bagaimana saya bisa melakukannya?
Vicky Dev

116

Bagaimana dengan pohon ? tree -lakan mengikuti symlinks.

Penafian : Saya menulis paket ini.


2
Bagaimana dengan paket lengkung?
Mr_and_Mrs_D

Ini adalah tampilan yang lebih intuitif daripada ls. Ini juga lebih mudah untuk di-paste.
dhaupin

46
find /dir -type f -follow -print

-type f berarti itu akan menampilkan file nyata (bukan symlink)

-follow berarti akan mengikuti symlink direktori Anda

-print akan menyebabkannya menampilkan nama file.

Jika Anda menginginkan tampilan tipe ls, Anda dapat melakukan hal berikut

find /dir -type f -follow -print|xargs ls -l

ini menghasilkan tampilan yang lebih cantik daripada ls -Lopsi
eusoubrasileiro

10

Menggunakan ls:

  ls -LR

dari 'man ls':

   -L, --dereference
          when showing file information for a symbolic link, show informa‐
          tion  for  the file the link references rather than for the link
          itself

Atau, menggunakan find:

find -L .

Dari manual find:

-L     Follow symbolic links.

Jika Anda hanya ingin mengikuti beberapa tautan simbolis (seperti mungkin yang paling atas yang Anda sebutkan), Anda harus melihat opsi -H, yang hanya mengikuti symlink yang Anda lewati di baris perintah.


5

Saya tahu treeitu pantas, tetapi saya tidak memasang pohon. Jadi, saya punya alternatif yang cukup dekat di sini

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'

Inilah yang saya butuhkan. Terima kasih.
Scott C

5
find -L /var/www/ -type l

# man find
-L     Follow  symbolic links.  When find examines or prints information about files, the information used shall be taken from the

properti dari file yang ditunjuk oleh tautan, bukan dari tautan itu sendiri (kecuali jika itu adalah tautan simbolis yang rusak atau ditemukan tidak dapat memeriksa file yang menjadi tautannya). Penggunaan opsi ini menyiratkan -noleaf. Jika nanti Anda menggunakan opsi -P, -noleaf masih akan berlaku. Jika -L berlaku dan menemukan menemukan tautan simbolik ke subdirektori selama pencariannya, subdirektori yang ditunjuk oleh tautan simbolik akan dicari.


2
ls -R -L

-Ltautan simbolik dereferences. Ini juga akan membuat tidak mungkin untuk melihat symlink ke file, meskipun - mereka akan terlihat seperti file runcing.


-1

jika Anda ingin mencetak semua konten file : find . -type f -exec cat {} +

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.