Poo*_*zer 12 unix background xargs
我想知道如何将xargs生成的命令发送到后台.例如,考虑一下
find . -type f -mtime +7 | tee compressedP.list | xargs compress
Run Code Online (Sandbox Code Playgroud)
我试过了
find . -type f -mtime +7 | tee compressedP.list | xargs -i{} compress {} &
Run Code Online (Sandbox Code Playgroud)
..并且出乎意料的是,它似乎将xargs发送到后台了?
如何使compress命令的每个实例都转到后台?
Rob*_*obM 13
使用--max-procs/ -P选项在后台运行xargs目标.从GNU xargs版本4.2.27的手册页:
--max-procs = max-procs,-P max-procs
一次运行max-procs进程; 默认值为1.如果max-procs为0,则xargs将一次运行尽可能多的进程.将-n选项与-P一起使用; 否则很可能只会有一名执行官.
(您可能希望将其与此相结合,-n 1以确保您要压缩的每个文件都有一个新进程)
你可以用一个非常快的shellcript来调用compress.
#!/bin/sh
# call it 'compbg' and chmod a+x
compress $* &
Run Code Online (Sandbox Code Playgroud)
然后
find . -type f -mtime +7 | tee compressedP.list | xargs -I{} compbg {}
Run Code Online (Sandbox Code Playgroud)
虽然我认为你可能会更乐意使用这个xargs参数:
-P maxprocs
Parallel mode: run at most maxprocs invocations of utility at once.
Run Code Online (Sandbox Code Playgroud)
此命令应该一次查找/ tee/compress 10个文件,直到完成为止,并立即将控制权返回给调用脚本/ shell.
find . -type f -mtime +7 | tee compressedP.list | xargs -I{} -P10 compress {} &
Run Code Online (Sandbox Code Playgroud)
对于SunOS,您可以查看GNU Parallel http://www.gnu.org/software/parallel/
find . -type f -mtime +7 | tee compressedP.list | parallel compress
Run Code Online (Sandbox Code Playgroud)
如果文件名包含'\n'或空格,它还有一个额外的好处:添加-j + 0将使每个CPU核心运行一次压缩.
| 归档时间: |
|
| 查看次数: |
4920 次 |
| 最近记录: |