grep -R(kecuali untuk GNU dimodifikasi yang grepditemukan pada OS / X 10.8 dan di atas) mengikuti symlinks, jadi walaupun hanya ada 100GB file di ~/Documentsdalamnya, mungkin masih ada symlink /untuk misalnya dan Anda akan akhirnya memindai seluruh sistem file termasuk file seperti /dev/zero. Gunakan grep -rdengan GNU yang lebih baru grep, atau gunakan sintaks standar:
find ~/Documents -type f -exec grep Milledgeville /dev/null {} +
(Namun perhatikan bahwa status keluar tidak akan mencerminkan fakta bahwa polanya cocok atau tidak).
grepmenemukan garis yang sesuai dengan pola. Untuk itu, ia harus memuat satu baris sekaligus dalam memori. GNU grepsebagai lawan dari banyak grepimplementasi lainnya tidak memiliki batasan pada ukuran baris yang dibaca dan mendukung pencarian dalam file biner. Jadi, jika Anda memiliki file dengan garis yang sangat besar (yaitu, dengan dua karakter baris baru yang sangat jauh), lebih besar dari memori yang tersedia, itu akan gagal.
Itu biasanya akan terjadi dengan file yang jarang. Anda dapat mereproduksinya dengan:
truncate -s200G some-file
grep foo some-file
Yang itu sulit untuk diselesaikan. Anda dapat melakukannya sebagai (masih dengan GNU grep):
find ~/Documents -type f -exec sh -c 'for i do
tr -s "\0" "\n" < "$i" | grep --label="$i" -He "$0"
done' Milledgeville {} +
Itu mengubah urutan karakter NUL menjadi satu karakter baris baru sebelum memasukkan input ke grep. Itu akan mencakup untuk kasus-kasus di mana masalahnya adalah karena file jarang.
Anda dapat mengoptimalkannya dengan melakukannya hanya untuk file besar:
find ~/Documents -type f \( -size -100M -exec \
grep -He Milledgeville {} + -o -exec sh -c 'for i do
tr -s "\0" "\n" < "$i" | grep --label="$i" -He "$0"
done' Milledgeville {} + \)
Jika file tidak jarang dan Anda memiliki versi GNU grepsebelumnya 2.6, Anda dapat menggunakan --mmapopsi. Garis-garis tersebut akan disimpan dalam memori sebagai lawan disalin di sana, yang berarti sistem selalu dapat mengklaim kembali memori dengan membuka halaman ke file. Opsi itu telah dihapus di GNU grep2.6