Sadece belirli bir dizindeki dosyaları bulma ve bash kullanarak alt dizinleri yok sayma


130

Diğer benzer sorulara baktım, ancak kavramı kavramamı ve sınırlı zamanıma dayanarak durumuma uygun hale getirmemi sağlayacak bir soru bulamadım. Bazı dosyaları bulmak için sadece find komutunu çalıştırıyorum, ancak alt dizinlerdeki bazı dosyalar, görmezden gelmek istediğim aynı ada sahip. Herhangi bir yardım için teşekkürler. Aşağıda kullandığım komut:

İlgilendiğim dosyalar / kalıp: / dev / abc-scanner, / dev / abc-cash ....

Komuta:

find /dev/ -name 'abc-*'

Ne iade ediliyor:

/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash

Son dosyaları görmezden gelmek istiyorum: /dev/.udev / ...


9
belirli alt dizinleri görmezden mi geliyor yoksa herhangi bir alt dizine inmiyor mu? İkincisi için, -maxdepth 1 seçeneğini kullanın
frankc

@frankc Cevap olarak gönderin.
cnicutar

Yanıtlar:


203

Bulmayı sadece ilk seviyeyle sınırlamak istiyorsanız, şunları yapabilirsiniz:

 find /dev -maxdepth 1 -name 'abc-*'

... veya özellikle .udevdizini dışlamak istiyorsanız , şunları yapabilirsiniz:

 find /dev -name '.udev' -prune -o -name 'abc-*' -print

Yukarıdaki tüm sembolik bağlantıların yukarıdaki düzende bulunduğunu işaret ettiği yerleri listelemek isteseydim, sadece bir boru kullanır mıydım? Find / dev -maxdepth 1 -name 'abc- *' gibi bir şey | ls -l
suffa

1
Bunun xargsyerine kullanmak daha iyidir , yani şunun gibi bir şey: find /dev -maxdepth 1 -name 'abc-*' | xargs ls -lama eğer isimlerde boşluk olma ihtimali varsa, yapmalısınızfind /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
Mark Longair 10'11

Ancak, Stephen Darlington'ın cevabının işaret ettiği gibi , neden öylece yapmayacağından emin değilimls -l /dev/abc-*
Mark Longair

Ayrıca, sembolik bağlantıların nereye işaret ettiğini öğrenmek istiyorsanız, bunu yapabilirsinizfor x in /dev/abc-*; do readlink -f $x; done
Mark Longair

1
Ya da alt dizinleri yalnızca birinci seviyede istiyorsanız, ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev... en azından benim Linux'ta /dev/*/*dosyalar içermez, /dev/.udev/*böylece fgrep -v.
29'da üçlü

9

Kullanmanız gereken özel bir sebep var mı find? lsBir dizindeki bir kalıpla eşleşen dosyaları bulmak için kullanabilirsiniz .

ls /dev/abc-*

Kullanmanız gerekiyorsa find, -maxdepth 1anahtarı yalnızca belirtilen dizine uygulamak için kullanabilirsiniz .


Sanırım bunun -maxdepth 1yerine demek istiyorsun-maxdepth 0
Mark Longair

5
Joker karakterin burada önemli olduğu belirtilmelidir, değil ls. Aynı dosyaları echoya wcda sizde bulabilirsiniz, çünkü kabuk sizin için joker karakteri genişletir. Yani for file in /dev/abc-*; do something with each "$file"; doneOP aslında aradığını olabilir.
üçlü

1
Ah, hangi yönden olduğunu asla hatırlayamıyorum ... Düzenleme için teşekkürler. Ayrıca evrensel olmadığını da belirtmek gerekir. findÖrneğin Solaris sürümünde yok.
Stephen Darlington

@tripleee +1. Evet. Mümkünse hepsini kabukta yapmak tercih edilir.
Stephen Darlington

1
@MustafaOzturk lsGereksiz. for f in abc*; ...tüm ihtiyacın olan.
Stephen Darlington

4

Bu istediğini yapabilir:

find /dev \( ! -name /dev -prune \) -type f -print

2
Evet, bu çalışıyor. -maxdepth bazı eski Unix'lerde find'da uygulanmaz.
CCTO

-1
find /dev -maxdepth 1 -name 'abc-*'

Benim için çalışmıyor. Hiçbir şey döndürmez. Sadece yaparsam. bana üzerinde çalıştığım dosyanın altındaki dizindeki tüm dosyaları veriyor.

find /dev -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls

"." İle hiçbir şey döndürmeyin. bunun yerine, dizinimdeki tüm 'büyük' ​​dosyaların bir listesini ve eskilerini sakladığım kök dosyaları / dizini alırım.

Devam ediyor. Bu çalışıyor.

find ./ -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls
564751   71 -rw-r--r--   1 snyder   bfactory   115739 May 21 12:39 ./R24eTightPiPi771052-55.root
565197  105 -rw-r--r--   1 snyder   bfactory   150719 May 21 14:27 ./R24eTightPiPi771106-2.root
565023   94 -rw-r--r--   1 snyder   bfactory   134180 May 21 12:59 ./R24eTightPiPi77999-109.root
719678   82 -rw-r--r--   1 snyder   bfactory   121149 May 21 12:42 ./R24eTightPiPi771098-10.root
564029  140 -rw-r--r--   1 snyder   bfactory   170181 May 21 14:14 ./combo77v.root

Görünüşe göre ilgilenilen /dev dizin anlamına gelir . Ancak ./gerekli, sadece değil .. /Aşağı /devyukarı ne anlama geldiğini anladıktan sonra bile buna duyulan ihtiyaç açık değildi .

Yorum olarak yanıt veremedim çünkü 'itibarım' yok.


1
İyi cevaplar vererek itibar kazanırsınız. Lütfen bu stackoverflow.com/conduct'ı
aifrim

Yorum yapmanıza izin verilmemesinin nedenleri var ve bu size Cevap bölümüne burada yorum koyma izni vermiyor. Lütfen bunu silin.
Rob
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.