2010-10-13 17 views
164

find komutunu alt dizinlere tekrar girmeyecek şekilde kullanmak mümkün mü? Örneğin,Özyinesiz bulma

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

Ve find DirsRoot --donotrecuourse -type f gibi bir aracın sonucu sadece File1, File2 olacak?

cevap

243

Geçerli komut yapınıza bağlı olarak -maxdepth 1 seçeneği ile istediğinizi elde edeceğinizi düşünüyorum. Değilse, find için man page'a bakmayı deneyebilirsiniz. (Kolaylık adına)

İlgili girişi: temelde

-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 şunlardır:

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

Veya:

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

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

+0

@Paul R: Aslında, bu tür gizli dosyaları nasıl ele almak istediğine bağlı, ama yine de cevabımı değiştirdim. Onun örneği için '1' muhtemelen istediği şeydir. – eldarerathis

+0

Benim için '-maxdepth 0' * * herhangi bir * dosya göstermiyor ancak' -maxdepth 1', gizli dosyaların da gösterilmesiyle amaçlandığı şekilde çalışıyor. –

21

Sana -maxdepth 1 aradığınız inanıyoruz.

+1

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

+0

Evet, eğer komutu onun örneğinde olduğu gibi kullanıyor olsaydı, o zaman 1 olur. Benim hatam. –

13

POSIX uyumlu çözüm bakarsak: uyumlu seçeneği POSIX değildir -maxdepth

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

+0

bu çözüm için teşekkürler, ancak bu 'DirsRoot/* -type f -prune' bulmak için basitleştirilemez mi? – dokaspar

+0

@dokaspar Gerçekten harika bir soru! (-prune btw'den önce "-o" yazmayı unutmuştunuz) Yanıt hayır, olamaz. NEDEN ANLAŞILABİLİRSİNİZ NEDEN ANLAŞILABİLİRSİNİZ, 'DirsRoot/* -type f -o -prune' komutunu vermeden önce 'set -x' komutunu yayarsınız ve hemen kendiniz göreceksiniz. Kök neden, 'DirsRoot/* 'ifadesinin kabuk genişlemesinin sınırlamalarıdır. – sqrt163