Ada panjang maksimum daftar argumen untuk proses baru dalam sistem POSIX. findakan 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 findmenggunakan sedikit lebih dari setengah angka itu. Ini koheren dengan fakta bahwa, pada sistem di mana ia bekerja, xargs --show-limitsmemberitahu 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 findakan tetap bersatu untuk setiap doa adalah dengan bereksperimen, misalnya dengan menjalankan
find / -exec echo {} + | wc -cl
Karena output dari findmemiliki garis untuk setiap echodoa, dimungkinkan untuk menghitungnya menggunakan wc -l. Jumlah total byte echoed adalah output dari wc -cgantinya. 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 | wcdan mengukur rasio antara jumlah karakter dan jumlah baris. Saya menemukan bahwa panjang baris perintah maksimum yang digunakanfindsecara signifikan lebih kecil daripada batas POSIX teoretis, dan jauh lebih dekat denganSize of command buffer we are actually usinggaris dalam output darixargs --show-limits. Ini berlaku untuk Linux dan mungkin juga berlaku untuk implementasi Mac OSfind, meskipunxargstidak akan mencetak nilai di Mac OS. Adakah yang tahu mengapa ini terjadi?