Необходимо смочь сделать это использование --new-file
переключатель. Взятый из различной страницы справочника:
--new-file
In directory comparison, if a file is found in only one direc-
tory, treat it as present but empty in the other directory.
Попробуйте это:
diff -crB --new-file pp0 pp1 > pp0.patch
При установке инструмента GNU Parallel, можно сделать довольно легкую работу того, что Вы пытаетесь выполнить:
$ find . -maxdepth 1 -type f -note -iname "*.gpg" | sort | \
parallel --gnu -j 8 --workdir $PWD ' \
echo "Encrypting {}..."; \
gpg --trust-model always \
--recipient "me@myself.com" --output "{}.gpg" \
--encrypt "{}" && rm "{}" \
'
Вышеупомянутое берет вывод find
и выполнение его до parallel
, и выполнение 8 за один раз. Везде существует возникновение {}
имена файлов, от которых проходят find
заменит {}
в тех местах.
Вы могли бы хотеть посмотреть на параллель гну и --semaphore
опция. Из документации:
- семафор
Работа как семафор подсчета. - семафор заставит GNU, параллельный запускать команду в фоновом режиме. Когда количество одновременных заданий будет достигнуто, параллель GNU будет ожидать одного из них для завершения прежде, чем запустить другую команду.
Вы используете --jobs 8
ограничить количество заданий к 8. Можно передать вывод по каналу вида в parallel
как Вы сделал бы с xargs
. sem
псевдоним для parallel --semaphore
Я написал простой -–-сценарий Perl, который позволяет контролировать максимальное количество одновременно выполняемых команд:https://github.com/matmu/parallelize_cmds
Может вас заинтересовать.
sudo
за пределамиfind
? Сделайте это asudo -i find ..
. Я не думаю, что можно передать по каналу кsudo
тем способом. Вы могли сделать это:echo "cmd1" | sudo bash
. – slm♦ 24.06.2013, 21:20