Ada panjang maksimum daftar argumen untuk proses baru dalam sistem POSIX. find
akan membagi eksekusi jika path file lebih panjang dari ini. Untuk melihat batasan di Linux, gunakan xargs --show-limits
(jangan bekerja di Mac OS, jika seseorang tahu alternatif yang lebih baik, silakan komentar di sini)
sunting: dicuri langsung dari jawaban Gnouc, cara POSIX untuk mendapatkan panjang maksimum daftar argumen adalah getconf ARG_MAX
. Namun, saya menjalankan percobaan pada mesin mac os saya, dan sepertinya find
menggunakan sedikit lebih dari setengah angka itu. Ini koheren dengan fakta bahwa, pada sistem di mana ia bekerja, xargs --show-limits
memberitahu kita bahwa itu tidak akan menggunakan panjang argumen maksimum (dalam hal ini juga akan menggunakan sekitar setengah angka itu), namun saya tidak dapat menemukan penjelasan untuk itu.
sunting 2: tampaknya satu-satunya cara yang dapat diandalkan untuk menentukan berapa banyak parameter find
akan tetap bersatu untuk setiap doa adalah dengan bereksperimen, misalnya dengan menjalankan
find / -exec echo {} + | wc -cl
Karena output dari find
memiliki garis untuk setiap echo
doa, dimungkinkan untuk menghitungnya menggunakan wc -l
. Jumlah total byte echo
ed adalah output dari wc -c
gantinya. Membagi satu dengan yang lain Anda mendapatkan jumlah rata-rata byte dalam parameter untuk setiap permintaan perintah (meskipun nilai yang sedikit lebih rendah, karena pembulatan, kira-kira setengah dari rata-rata panjang lintasan di sistem Anda)
find / -exec echo | wc
dan mengukur rasio antara jumlah karakter dan jumlah baris. Saya menemukan bahwa panjang baris perintah maksimum yang digunakanfind
secara signifikan lebih kecil daripada batas POSIX teoretis, dan jauh lebih dekat denganSize of command buffer we are actually using
garis dalam output darixargs --show-limits
. Ini berlaku untuk Linux dan mungkin juga berlaku untuk implementasi Mac OSfind
, meskipunxargs
tidak akan mencetak nilai di Mac OS. Adakah yang tahu mengapa ini terjadi?