Özyinelemeli dosya listesi için derinlik nasıl sınırlandırılır?


346

Linux'ta özyinelemeli bir dosya listesinin derinliğini sınırlamanın bir yolu var mı?

Şu anda kullandığım komut:

ls -laR > dirlist.txt

Ama yaklaşık 200 dizinim var ve her birinde 10 dizin var. Bu yüzden çok uzun sürecek ve çok fazla sistem kaynağı barındıracak.

Gerçekten ilgilendiğim tek şey, ilk düzey alt dizinler için sahiplik ve izin bilgileri:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

DÜZENLE:

Son komut seçimi:

find -maxdepth 2 -type d -ls >dirlist

3
Ayrıca şöyle bir şey olabilir ls -la /var/www/vhosts/*mi?
KevinO

Yanıtlar:


494

Ödemeye -maxdepthbayrağınıfind

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

Burada 1'i maksimum seviye derinliği olarak kullandım, -type dsadece daha sonra ls -ldiçeriğini uzun formatta listeleyen dizinleri bulmak anlamına gelir .


2
OP dizinlerin kendilerinin izinlerini bilmek istediğinden, -dseçeneği eklemeniz gerekir ls.
Peter van der Heijden

@Peter van der Heijden: Sadece findana sorununu çözmek için rol yazdım . Neyse teşekkürler ekliyorum.
Alberto Zaccagni

3
Ben kullanım -print0ve xargs -0çok. Örnek:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Chris K

2
Oh evet, kesinlikle yanlış görünüyor biliyorum, 6 yıl önce olmasa da: D Zaten stackoverflow.com/a/25618630/57095 üzerinde kabul edilen cevap olması gerektiğini yorumladım .
Alberto Zaccagni

ahhh maxdepth, bir derinlik seçeneği var mı?
Alexander Mills

95

Adlı kullanıcının findseçeneklerini kullanın

Aslında /bin/lsgerekli bir yürütme yoktur ;

Bul seçeneğinin sadece bunu yapan bir seçeneği vardır:

find . -maxdepth 2 -type d -ls

Eklemek, ilgilendiğiniz alt dizin sadece bir seviye görmek için -mindepthaynı seviyede olarak -maxdepth:

find . -mindepth 2 -maxdepth 2 -type d -ls


Çıktı biçimlendirmesini kullan

Gösterilen ayrıntılar farklı olduğunda, -printfdosyayla ilgili herhangi bir ayrıntıyı özel biçimde gösterebilir; Sembolik izinleri ve dosyanın sahibinin adını göstermek için kullanmak -printfile %Mve %ude format.

Daha sonra grubu içeren tam sahiplik bilgisini istediğinizi fark ettim. %gSembolik ad veya %Ggrup kimliği ( %Usayısal kullanıcı kimliği için olduğu gibi) biçiminde kullanın

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

Bu size sadece doğru dosyalar için ihtiyacınız olan ayrıntıları vermelidir.

Kullanıcı ve grup için aslında farklı değerler gösteren bir örnek vereceğim:

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(Okunabilirlik için düzenlendi: girintili, kısaltılmış son satır)


Performansla ilgili notlar

Yürütme süresi bu tür komutlar için çoğunlukla önemsiz olsa da, burada performans artışı, bunu belirtmeye değer olacak kadar büyüktür:

Her isim için yeni bir süreç yaratmakla kalmıyoruz - büyük bir görev - findzaten bildiği gibi bilgilerin okunmasına bile gerek yok.


9
Bu kabul edilen cevap, benimkinden çok daha iyi olmalı.
Alberto Zaccagni

1
@AlbertoZaccagni Sanırım işlerin çabucak işe yaraması için kısa cevapları seviyoruz.
anddero

65

tree -L 2 -u -g -p -d

Dizin ağacını derinlik 2'ye (-L 2) kadar güzel bir biçimde yazdırır. Kullanıcı (-u) ve grup (-g) ile izinleri (-p) yazdırın. Yalnızca dizinleri (-d) yazdırın. ağacın başka birçok yararlı seçeneği vardır.


12
ağaç sevgidir. ağaç hayattır.
yosefrow

Basitçe tree -L 2 xxx/veya tree -L 2 -d xxx/bazı durumlar için yeterlidir.
Eric Wang

1

Gerçekten ilgilendiğim tek şey, birinci düzey alt dizinlerin sahiplik ve izin bilgileri.

İhtiyacımıza mükemmel şekilde uyan balıkımı oynarken kolay bir çözüm buldum.

ll `ls`

veya

ls -l $(ls)
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.