find(1)
Utilitas unix sangat berguna memungkinkan saya untuk melakukan suatu tindakan pada banyak file yang cocok dengan spesifikasi tertentu, misalnya
find /dump -type f -name '*.xml' -exec java -jar ProcessFile.jar {} \;
Di atas mungkin menjalankan skrip atau alat di atas setiap file XML di direktori tertentu.
Katakanlah skrip / program saya membutuhkan banyak waktu CPU dan saya memiliki 8 prosesor. Akan lebih baik untuk memproses hingga 8 file sekaligus.
GNU memungkinkan untuk pemrosesan pekerjaan paralel dengan -j
bendera tetapi find
tampaknya tidak memiliki fungsi seperti itu. Apakah ada metode penjadwalan pekerjaan generik alternatif untuk mendekati ini?
-P
opsi!xargs -P
- ia memiliki bug yang tidak pernah diperbaiki untuk mengacaukan output (tidak sepertiparallel
) setiap kali 2 utas menghasilkan output pada saat yang sama persis ...Paralel GNU juga dapat membantu.
Perhatikan bahwa tanpa
-j8
argumen,parallel
default ke jumlah core pada mesin Anda :-)sumber
Tidak perlu "memperbaiki"
find
- memanfaatkanmake
dirinya sendiri untuk menangani paralelisme.Biarkan proses Anda membuat file log atau file output lainnya, dan kemudian gunakan Makefile seperti ini:
dan dipanggil demikian:
Lebih baik lagi, jika Anda memastikan bahwa file output hanya akan dibuat pada penyelesaian proses Java yang berhasil, Anda dapat mengambil keuntungan dari
make
penanganan ketergantungan untuk memastikan bahwa lain kali hanya file yang belum diproses yang diselesaikan.sumber
Temukan memiliki opsi paralel yang dapat Anda gunakan secara langsung menggunakan simbol "+"; tidak diperlukan xarg. Menggabungkannya dengan grep, dapat menembus pohon Anda dengan cepat mencari korek api. misalnya, jika saya mencari semua file di direktori sumber saya yang berisi string 'foo', saya dapat meminta
find sources -type f -exec grep -H foo {} +
sumber
-exec command +
sintaks tidak menjalankannya secara paralel, tetapi "kelompokkan" banyak file bersama dan jalankan perintah dengan beberapa file sebagai argumen pada saat bersamaan. Kebetulan grep dapat melihat targetnya secara paralel.