Tập lệnh Bash để xử lý tệp bằng nhiều quy trình


1

Hầu hết các tập lệnh Bash xử lý tệp hàng loạt có thể được tăng tốc bằng cách sinh ra nhiều quy trình để sử dụng tất cả các lõi. Tôi muốn tạo một tập lệnh sẽ xử lý một loạt các tệp, chia số lượng tệp để xử lý như nhau giữa các quy trình. Làm thế nào để tôi làm điều này?

Câu trả lời:


4

Xem GNU song song để khởi chạy các quy trình con song song. Có cú pháp tương tự như xargs. Từ các tài liệu :

Để nén tất cả các tệp html bằng gzip chạy:

find . -name '*.html' | parallel gzip --best


GNU Parallel dường như không được cài đặt sẵn trên nhiều hệ thống Unix (bao gồm cả OS X và Ubuntu Server), nhưng nó đẹp hơn nhiều so với phương thức khác nếu bạn có tùy chọn cài đặt nó. Cảm ơn vì tiền hỗ trợ.
sudo

1

Tôi không biết liệu đây có phải là cách tốt nhất để làm điều đó không, nhưng đây là những gì tôi nghĩ ra.

Sử dụng: batch.sh [number of processes to use]

đợt.sh:

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
            ./helper.sh $i $1 &
        done

người trợ giúp.sh:

n=$1
for file in ./*; do
   # Your code here v
   echo Processing file: $file
   # ^
   n=$((n+1))
   n=$((n%$2))
done

Điều này sinh ra n quy trình mà mỗi quy trình xử lý một tệp sau đó bỏ qua (n - 1) tệp. Quá trình (i mod n) xử lý tệp thứ i.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.