özyineleme olmadan bul


246

findKomutu alt dizinlere geri çekilmeyecek şekilde kullanmak mümkün müdür? Örneğin,

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

Ve böyle bir şeyin sonucu find DirsRoot --donotrecuourse -type fsadece olacak File1, File2mı?

Yanıtlar:


380

-maxdepth 1Mevcut komut yapınıza bağlı olarak seçenekle istediğinizi elde edeceğinizi düşünüyorum . Değilse, bakıyor deneyebilirsiniz adam sayfası için find.

İlgili giriş (kolaylık uğruna):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

Seçenekleriniz temel olarak:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

Veya:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

OP örneği için bunun olması gerektiğini düşünüyorum -maxdepth 1?
Paul R

@ Paul R: Aslında, bu tür gizli dosyaları nasıl işlemek istediğine bağlı, ancak yine de cevabımı değiştirdim. Onun örneği 1muhtemelen istediği şeydir.
eldarerathis

1
Benim için -maxdepth 0gösterilmiyor herhangi bir dosya ama -maxdepth 1gizli dosyalar sıra görüntülenmesini olduğu gibi, amaçlanan çalışıyor.
Bruce Wayne

1
@BruceWayne not *in find DirsRoot/* -maxdepth 0 -type f. Bunu dışarıda bırakırsanız dosya gösterilmez.
mapeters

@mook, Teşekkürler, ama bu sorunu yaşadığım orijinal bağlamı hatırlayamıyorum, haha.
Bruce Wayne

33

Aradığına inanıyorum -maxdepth 1.


1
OP örneği için bunun olması gerektiğini düşünüyorum -maxdepth 1?
Paul R

Evet, komutu aynen örneğinde olduğu gibi kullanıyor olsaydı, o zaman 1 olurdu. Benim hatam.
waffle paradoksu

17

POSIX uyumlu çözüm arıyorsanız:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepth , POSIX uyumlu seçenek değildir.


Bu çözüm için teşekkürler, ancak bu basitleştirilemez find DirsRoot/* -type f -prunemi?
dokaspar

@dokaspar Gerçekten harika bir soru! (btw'den önce "-o" eklemeyi unuttunuz -prune) Yanıt hayır, yapamaz. Niçin basitleştirilemediğini tam olarak anlamak için, set -xyaymadan önce komut verin find DirsRoot/* -type f -o -pruneve hemen kendiniz göreceksiniz. Temel neden, DirsRoot/*ifadenin kabuk genişlemesinin sınırlamalarıdır .
sqr163

centos üzerinde çalışmıyor, hala çıkışta tam özyineleme yapıyor !!!! Doğru komutfind . -name . -o -prune
Reishin

Yine de Solaris'te, DirsRoot'u istenen yol olarak tutarak cd'ye ihtiyacınız yok; bunun yerine şunları bulabilirsiniz: DirsRoot /. -tip f-baskı -o-adı. -o-prune
spioter
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.