Belirli bir dizeyi içeren dosya sayısını (dizinde) bash / sh biçiminde girdi olarak nasıl sayabilirim?
Belirli bir dizeyi içeren dosya sayısını (dizinde) bash / sh biçiminde girdi olarak nasıl sayabilirim?
Yanıtlar:
grep -l "string" * | wc -l
çalışma dizinindeki tüm dosyaların içeriğinde "string" i arayacak ve size kaç tanesinin eşleştiğini söyleyecektir.
grep -lr "string" directory | wc -l
Özyinelemeli arama istemiyorsanız, maxdepth seçeneği ile find komutunu kullanabilirsiniz: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Bu ikinci seçeneğin grep'ten daha yavaş olduğunu unutmayın.
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Açıklama: Dosya adlarında değil (Wag'in yanıtı gibi) içeriklerinde "pattern_to_look_for" bulunan dosya sayısını arar. Sorunuzdan ne aradığınızı söylemek zor.
find . ! -name . -prune -type f
yapmak zorunda (backticks kaçırmayın). Bu komut yalnızca klasördeki dosyaları listeler.
Bash'de herhangi bir dosya adıyla çalışır :
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Açıklama:
grep
bireyin -Z
seçenek ␀ bayt ayırıcı ile her sonucu yazdırır. Bu karakter bir dosya adının parçası olamaz, bu nedenle dosya sayısını almak için ayırıcıların sayısını sayabiliriz.tr
.wc
.