2009-12-23 28 views
9

Tôi muốn biết làm thế nào tôi có thể gửi lệnh (s) sinh ra bởi xargs để nền. Ví dụ, hãy xem xétGửi (các) lệnh được sinh ra bởi xargs đến nền

find . -type f -mtime +7 | tee compressedP.list | xargs compress 

tôi đã cố gắng

find . -type f -mtime +7 | tee compressedP.list | xargs -i{} compress {} & 

.. và như bất ngờ, có vẻ như để gửi xargs để nền để thay thế?

Làm cách nào để làm cho mỗi trường hợp của lệnh nén chuyển sang nền?

Trả lời

5

Đối với SunOS bạn có thể có một cái nhìn tại GNU Song song http://www.gnu.org/software/parallel/

find . -type f -mtime +7 | tee compressedP.list | parallel compress 

Nó có lợi ích bổ sung không crapping ra nếu tên tập tin chứa ' "hoặc không gian. Thêm -j + 0 sẽ làm cho nó chạy một nén mỗi lõi CPU

6

Bạn có thể tạo một bản shells rất nhanh để gọi nén.

#!/bin/sh 
# call it 'compbg' and chmod a+x 
compress $* & 

sau đó

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} compbg {} 

Mặc dù tôi nghĩ rằng bạn có thể hạnh phúc hơn sử dụng này xargs luận:

-P maxprocs 
     Parallel mode: run at most maxprocs invocations of utility at once. 

Lệnh này nên tìm/tee/nén 10 file cùng một thời gian cho đến khi hoàn thành công việc , cũng như trả lại quyền kiểm soát ngay lập tức cho tập lệnh/trình bao gọi.

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} -P10 compress {} & 
+0

Các UNIX Tôi có ($ uname -a SunOS xxx 5.10 Generic_xx7xx1- 06 sun4u sparc SUNW, Sun-Fire) không có -P ($ xargs -P xargs: tùy chọn bất hợp pháp - P xargs: Cách dùng: xargs: [-t] [-p] [-e [eofstr]] [ -E eofstr] [-I replstr] [-i [replstr]] [-L #] [-l [#]] [-n # [-x]] [-kích thước] [cmd [args ...] ]) Bất kỳ lựa chọn thay thế nào khác ngoài trình bao bọc shell script? – PoorLuzer

+1

Xin lỗi, tôi không thể tìm thấy nhiều cho SunOS - mặc dù tôi đã tìm thấy gói này "xjobs" mà bạn có thể biên dịch ... http://www.maier-komor.de/xjobs.html – gnarf

2

này làm việc cho tôi khi tôi muốn chỉnh sửa tất cả các file có chứa foo

grep -rl foo ./ |. 'xargs emacs` &

9

Sử dụng tùy chọn --max-procs/-P để chạy mục tiêu xargs trong nền. Từ trang người đàn ông của GNU xargs phiên bản 4.2.27:

max-procs = max-procs, -P max-procs

Chạy lên đến quá trình max-procs tại một thời điểm; mặc định là 1. Nếu max-procs là 0, xargs sẽ chạy càng nhiều tiến trình càng tốt tại một thời điểm. Sử dụng tùy chọn -n với -P; nếu không có khả năng là chỉ có một exec sẽ được thực hiện.

(Bạn có thể muốn kết hợp này với -n 1 để đảm bảo rằng có một quá trình mới cho mỗi tập tin bạn muốn nén)

+0

(Hmm, chỉ cần nhận ra câu trả lời của tôi là một bản sao của nửa sau câu trả lời của gnarf, mà tôi không đọc sau khi bình luận mở về viết một kịch bản trình bao. Tôi sẽ để lại câu trả lời của tôi ở đây câu trả lời của gnarf như tôi đã làm) – RobM

Các vấn đề liên quan