Я хочу знать, как я могу отправить команду (команды), порожденную xargs к фону. Например, рассмотреть
find . -type f -mtime +7 | tee compressedP.list | xargs compress
Я попробовал
find . -type f -mtime +7 | tee compressedP.list | xargs -i{} compress {} &
.. и как неожиданное, это, кажется, отправляет xargs в фон вместо этого?
Как я заставляю каждый экземпляр из команды сжатия перейти к фону?
Для SunOS вы можете взглянуть на GNU Parallel http://www.gnu.org/software/parallel/
find . -type f -mtime +7 | tee compressedP.list | parallel compress
У него есть дополнительное преимущество, заключающееся в том, что он не выводит сообщения, если имя файла содержит '"или пробел . Добавление -j + 0 заставит его выполнять одно сжатие на каждое ядро ЦП.
Вы, вероятно, могли бы сделать очень быстрый shellscript для вызова компрессии.
#!/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.
Эта команда должна найти / tee / сжатие 10 файлов за раз до ее выполнения, а также возврат управления немедленно вызывающему скрипту/shell.
find . -type f -mtime +7 | tee compressedP.list | xargs -I{} -P10 compress {} &
У меня это работает, когда я хочу отредактировать все файлы, содержащие foo
grep -rl foo ./ | `xargs emacs` &