2009-12-23 18 views
9

我想知道如何將xargs產生的命令發送到背景。 例如,考慮發送xargs產生的命令到背景

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

我試圖

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

..和意外,這似乎發送到xargs的背景呢?

如何讓壓縮命令的每個實例都轉到後臺?

回答

5

在SunOS你可以看看GNU並行http://www.gnu.org/software/parallel/

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

它如果文件名中包含'「或空間。添加-j + 0將不會crapping出額外的好處它運行的每個CPU核心一個壓縮

6

你也許可以做一個非常快的shell腳本調用壓縮。

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

然後

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

雖然我覺得你可能會使用這個xargs的是快樂的說法:

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

這個命令應該找到/在同一時間開球/壓縮10個文件,直到對其做,並立即將控制權返回給調用腳本/ shell。

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

的UNIX我有($ UNAME -a 的SunOS 5.10的xxx Generic_xx7xx1- 06 sun4u sparc SUNW,Sun-Fire)沒有-P($ xargs -P xargs:非法選項 - P xargs:用法:xargs:[-t] [-p] [-e [eofstr]] [ -E eofstr] [-I replstr] [-i [replstr]] [-L#] [-l [#]] [-n#[-x] [-s大小] [CMD [參數...] ]) 除了shell腳本封裝以外的其他選擇嗎? – PoorLuzer

+1

對不起,我找不到太多的SunOS - 雖然我找到了這個軟件包「xjobs」,你可以編譯它... http://www.maier-komor.de/xjobs。html – gnarf

2

這對我的作品時,我想編輯包含富所有文件

的grep -rl富./ |`xargs的emacs` &

9

使用--max-procs/-P選項在後臺運行xargs目標。從GNU xargs的版本4.2.27手冊頁:

--max-特效= MAX-特效,-P MAX-特效

運行到一次MAX-特效處理;缺省值爲1.如果max-procs爲0,xargs將一次運行儘可能多的進程。在-P選項中使用-n選項;否則很可能只有一名執行官會完成。

(您可以將它與-n 1相結合,可確保有一個新的進程對每個文件要壓縮)

+0

(嗯,剛剛意識到我的答案是gnarf答案的後半部分的重複,在開始寫關於shell腳本的評論之後我沒有讀過,我會在這裏留下我的答案,以防其他人也可以瀏覽gnarf的回答和我一樣) – RobM