Как правило, заключайте аргумент в кавычки и экранируйте символы пробела в аргументе. В приведенном вами примере попробуйте:
rsync --size-only -avzPe ssh "/mnt/xlses/split/v2/name\ with\ space/" "root@myserver.com:/mnt/xlses/split/v2/name\ with\ space"
Я думаю, что вы ищете --memfree
в GNU Parallel:
find... | parallel --memfree 1G dostuff
Это запустится dostuff
только при наличии 1 ГБ ОЗУ.Он будет запускать еще один до тех пор, пока не будет свободно менее 1 ГБ ОЗУ или не будет выполняться 1 задание на каждый поток ЦП. Если 0,5 ГБ ОЗУ свободно (50% от 1 ГБ ОЗУ ), самая младшая работа будет уничтожена. Итак, в метакоде:
limit = 1G
while true:
if freemem > limit:
if count(running_jobs) < cpu.threads():
another_job.start()
if freemem < 0.5 * limit
youngest_job.kill()
В сочетании с --retries 10
вы можете сказать GNU Parallel повторить 10 раз остановленное задание.
Если dostuff
занимает некоторое время, чтобы сожрать память, используйте --delay 30s
, чтобы подождать 30 секунд перед запуском следующего задания.
sysctl vm.overcommit_memory 2
Если вы хотите избежать контрольных групп