Отправка команды (команд), порожденной xargs к фону

Я хочу знать, как я могу отправить команду (команды), порожденную xargs к фону. Например, рассмотреть

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

Я попробовал

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

.. и как неожиданное, это, кажется, отправляет xargs в фон вместо этого?

Как я заставляю каждый экземпляр из команды сжатия перейти к фону?

12
задан PoorLuzer 23 December 2009 в 11:35
поделиться

3 ответа

Для SunOS вы можете взглянуть на GNU Parallel http://www.gnu.org/software/parallel/

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

У него есть дополнительное преимущество, заключающееся в том, что он не выводит сообщения, если имя файла содержит '"или пробел . Добавление -j + 0 заставит его выполнять одно сжатие на каждое ядро ​​ЦП.

5
ответ дан 2 December 2019 в 05:54
поделиться

Вы, вероятно, могли бы сделать очень быстрый 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 {} &
6
ответ дан 2 December 2019 в 05:54
поделиться

У меня это работает, когда я хочу отредактировать все файлы, содержащие foo

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

2
ответ дан 2 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: