Symlink dizinlerindeki dosyalar da dahil olmak üzere bir dizindeki tüm dosyaları özyinelemeli olarak listeleme


147

Ben bir dizin olduğunu varsayalım /dirdiğer dizinlere 3 sembolik bağ vardır ki içeride /dir/dir11, /dir/dir12ve /dir/dir13. Ben tüm dosyaları listelemek istediğiniz dirolanlar da dahil olmak üzere dir11, dir12ve dir13.

Daha genel olmak için, sembolik dizinlerde olanlar da dahil olmak üzere tüm dosyaları listelemek istiyorum. find .,, ls -Rvb. daha fazla listelemek için bunlara gitmeden sembolik bağlantıyı durdurun.


Yanıtlar:


233

-LSeçeneği lsistediğini başarmak olacaktır. Sembolik bağlantıları dereferences.

Yani komutunuz:

ls -LR

Bunu aşağıdakilerle de yapabilirsiniz:

find -follow

-followOpsiyon dizinlere sembolik bağlantıları takip etmek bulmak yönlendirir.

Mac OS X'te kullanım

find -L

olduğu gibi -follow.


14
-follow, yeni bulma sürümlerinde -L lehine kullanımdan kaldırılmıştır.
pjz

@pjz: '-follow onaylandı için bir çapraz referans var mı; -L 'kullanın? Biraz şaşırtıcı bir şekilde, opengroup.org/onlinepubs/009695399/toc.htm adresindeki POSIX / SUS standardında listelenen '-L' ve '-H' ve daha fazlasını '-follow' olarak buldum, kendi sorumu cevapladım.
Jonathan Leffler

bu benim için işe yaramadı. ilk şey oldu sonra denedim -follow- ve klasör bulamadıollow
smatthewenglish

4
OS X 10.10'da bu çalışır: find -L .- @ S.Matthew_English ile aynı sorunu yaşıyordum
fregante

Cevabınız iyi, ancak followdizin yolunu değil , yalnızca dosya yollarını (dosyaya tam yol) istiyorum, nasıl yapabilirim?
Vicky Dev

117

Ağaca ne dersin ? tree -lsimgeleri takip edecek.

Feragatname : Bu paketi yazdım.


2
Bir kemer paketine ne dersin?
Mr_and_Mrs_D

Bu daha sezgisel bir görüştür ls. Ayrıca yapıştırmak daha kolaydır.
dhaupin

46
find /dir -type f -follow -print

-type f gerçek dosyaları görüntüleyeceği anlamına gelir (sembolik bağlantılar değil)

-follow Dizin simgelerinizi takip edeceği anlamına gelir

-print dosya adlarının görüntülenmesine neden olur.

Bir ls tipi ekran istiyorsanız, aşağıdakileri yapabilirsiniz

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

Bu ls -Lseçenek daha güzel bir görüntü üretir
eusoubrasileiro

10

Ls kullanarak:

  ls -LR

'man ls' den:

   -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

Veya find:

find -L .

Bulma kılavuzundan:

-L     Follow symbolic links.

Sadece birkaç sembolik bağlantıyı takip etmek istediğinizi bulursanız (belki sadece bahsettiğiniz en üst düzey olanlar gibi), yalnızca komut satırında ilettiğiniz sembolik bağlantıları izleyen -H seçeneğine bakmalısınız.


5

Uygun olduğunu biliyordum tree, ama ağacım kurulu değildi. Burada oldukça yakın bir alternatifim var

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

Tam da ihtiyacım olan buydu. Teşekkür ederim.
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

bağlantının kendisinden değil, bağlantının işaret ettiği dosyanın özellikleri (bozuk bir sembolik bağ veya buluntu, bağlantının işaret ettiği dosyayı inceleyemediği sürece). Bu seçeneğin kullanılması -noleaf anlamına gelir. Daha sonra -P seçeneğini kullanırsanız, -noleaf yine geçerli olur. -L etkinse ve bul, arama sırasında bir alt dizine sembolik bir bağlantı bulursa, sembolik bağın işaret ettiği alt dizin aranır.


2
ls -R -L

-Ldereferences sembolik bağlantılar. Bu aynı zamanda dosyalara herhangi bir sembolik bağlantı görmeyi imkansız kılacaktır - sivri uçlu dosyaya benzeyeceklerdir.


-1

tüm dosya içeriğini yazdırmak istiyorsanız : find . -type f -exec cat {} +

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.