Bagaimana saya bisa menghitung jumlah file (dalam direktori) yang berisi string yang diberikan sebagai input di bash / sh?
Bagaimana saya bisa menghitung jumlah file (dalam direktori) yang berisi string yang diberikan sebagai input di bash / sh?
Jawaban:
grep -l "string" * | wc -l
akan mencari "string" di isi semua file di direktori kerja dan memberi tahu Anda berapa banyak yang cocok.
grep -lr "string" directory | wc -l
Jika Anda tidak ingin pencarian rekursif, Anda dapat menggunakan find dengan opsi maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Perhatikan bahwa opsi kedua ini lebih lambat dari grep.
grep
Parameter s -l
hanya akan menampilkan nama file yang cocok $PATTERN
, wc
dapat menghitungnya sesudahnya.
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Klarifikasi: Ini mencari jumlah file yang memiliki "pattern_to_look_for" dalam isinya dan tidak dalam nama file mereka (seperti jawaban Wag). Dari pertanyaan Anda, sulit untuk mengatakan apa yang Anda cari.
find . ! -name . -prune -type f
(jangan lewatkan backticks). Perintah ini hanya mencantumkan file dalam folder.
Ini berfungsi di Bash dengan nama file apa pun :
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Penjelasan:
grep
's -Z
pilihan mencetak setiap hasil dengan pemisah ␀-byte. Karakter ini tidak dapat menjadi bagian dari nama file, jadi kita bisa menghitung jumlah pemisah untuk mendapatkan jumlah file.tr
.wc
.