Belirli bir dizeyle başlayan bir dosya adına sahip tüm dosyaları bul?


154

İçinde kabaca 100000 dosya bulunan bir dizinim var ve belirli bir dizeyle başlayan tüm dosyalarda on binlerce dosyayla eşleşebilecek bazı işlevler gerçekleştirmek istiyorum.

denedim

ls mystring*

ancak bu 'Çok fazla argüman' bash hatasıyla döner. Bir sonraki planım kullanmaktı

find ./mystring* -type f

ama bunda da aynı sorun var.

Kodun şuna benzemesi gerekiyor

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

Bir fordöngü yerine boruya findgirmelisiniz while.
sonraki duyuruya kadar duraklatıldı.

Yanıtlar:


282

findJoker karakterle kullanın :

find . -name 'mystring*'

10
ve "find. -name 'mystring *' -exec [command]" işlevini çalıştırmak için, örneğin "find. -name 'mystring *' -exec rm {} \;" silin
Eldar

2
{}, Dosya adı için bir yer tutucudur :-) (böylece kendi eylemlerinizi oluşturabilirsiniz)
Sergio Tulentsev

1
Bu , dizeyi içeren tüm sonuçları döndürüyor gibi görünüyor ? The
Brian Z

7
... veya büyük / find . -iname 'mystring*'küçük harfe duyarlı olmayan arama için.
Frank Nocke

OP tek bir dizini ifade eder, bu nedenle sınırlı -maxdepth 1bulmadan önce -namemevcut klasörü
ekleyin

27
ls | grep "^abc"  

size alt dizeyle başlayan (OP'nin özellikle gerektirdiği) tüm dosyaları verecektir abc.
Yalnızca geçerli dizinde findçalışır, ancak yinelemeli olarak alt klasörlerde çalışır.

findYalnızca dizenizle başlayan dosyalar için kullanmak için deneyin

bul. -name 'abc' *


4

Yalnızca dosyalara aramanızı kısıtlamak istiyorsanız kullanmak düşünmelisiniz -type filan

büyük / -inameküçük harfe duyarlı olmayan arama için de kullanmayı deneyin

Misal:

find /path -iname 'yourstring*' -type f

Ayrıca boru işareti veya xargs olmadan sonuçlar üzerinde bazı işlemler gerçekleştirebilirsiniz.

Misal:

Dosyaları arayın ve boyutlarını MB cinsinden gösterin

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
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.