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.

CuriousDawg
sumber
Kemungkinan rangkap dari Cara mendapatkan nama file dengan linux `find`?
Eugen Konkov

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.

Michael Ridley
sumber
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.

Steve Baker
sumber
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
dvorak
sumber
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.

pjz
sumber
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/--/ |-/'
divinedragon
sumber
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.

Ashwin Muni
sumber
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.

Branan
sumber
-1

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

qrtLs
sumber