Собрав воедино информацию из нескольких источников, есть несколько вариантов.
Вывод таков, что только с команда параллельно вы можете получить то, что хотите, см. ниже.
Важные заметки:
- Я сделал тесты с
ср для копирования.Вы также должны учитывать ускорение (или замедление!), полученное с помощью rsync против ср или другие альтернативные команды в сочетании с параллельно.
- Я протестировал копирование только одного файла. Результаты могут измениться при копировании большого количества файлов (например, при объединении нескольких больших файлов со многими другими небольшими файлами и подкаталогами).
время <опция #N, копирование в одну цель>
time <опция #N, копирование в две цели>
чтобы получить сравнение, с файлом 1,2Gb.
Более того, в некоторых случаях я тестировал одну и ту же команду два или три раза, чтобы оценить разброс результатов.
Я не вычислял средние значения и стандартные отклонения, но результаты очевидны.
Вот что у меня получилось при указанных выше условиях тестирования, с краткими комментариями.
Я объединил в одну строку результаты нескольких тестов, когда они были доступны.
базовый вариант:
$ время cp -p источник/файл1 цель1/
реальный 0м0,846с 0м0,680с 0м0,659с
пользователь 0м0,000с 0м0,001с 0м0,016с
система 0m0,777s 0m0,662s 0m0,643s
параметры копирования:
Вариант параллельно
$ parallel cp -p источник/файл1 ::: цель1/
реальный 0м0,745с 0м0,740с
пользователь 0м0,121с 0м0,108с
система 0м0,609с 0м0,619с
$ parallel cp -p источник/файл1 ::: цель1/ цель2/
реальный 0м0,794с 0м0,860с
пользователь 0м0,116с 0м0,134с
система 0m1300s 0m1380s
Вариант тройник (добавление > /dev/ноль чтобы избежать вывода на стандартный вывод)
$ tee target1/file1 < источник/file1 > /dev/null
реальный 0 мин 0,874 с 0 мин 1 040 с 0 мин 1 028 с
пользователь 0м0,160с 0м0,172с 0м0,137с
система 0m0,714s 0m0,868s 0m0,887s
$ tee цель1/файл1 цель2/файл1 < источник/файл1 > /dev/null
реальный 0 мин 1 802 с 0 мин 1 680 с 0 мин 1 833 с
пользователь 0м0,136с 0м0,212с 0м0,197с
sys 0m1642s 0m1468s 0m1619s
Копирование на два цельs примерно удваивает время для одного цель, что несколько больше, чем время базовый вариант.
Вариант xargs
$ эхо-цель1 | xargs -n 1 cp -p источник/файл1
реальное 0м0,666с
пользователь 0м0,021с
система 0m0,646s
$ эхо цель1 цель2 | xargs -n 1 cp -p источник/файл1
реальное 0m1,197s
пользователь 0м0,018с
система 0m1,173s
Копирование на два цельs примерно удваивает время для одного цель, что аналогично времени для базовый вариант.
Вариант найти
$ find target1 -exec cp -p source/file1 {} \;
реальное 0м2,167с
пользователь 0м0,017с
система 0m1,627s
$ найти цель1 цель2 -exec cp -p источник/файл1 {} \;
реальное 0м3,905с
пользователь 0м0,020с
система 0м3,185с
Копирование на два цельs примерно удваивает время для одного цель, что намного больше, чем время базовый вариант... явный неудачник.
Источники для "множественного копирования":
- https://www.cyberciti.biz/faq/linux-unix-copy-a-file-to-multiple-directories-using-cp-command/
- Как скопировать файл в несколько папок с помощью командной строки?
- https://stackoverflow.com/questions/195655/how-to-copy-a-file-to-multiple-directories-using-the-gnu-cp-command
Источники производительности ср против. rsync:
- https://unix.stackexchange.com/questions/91382/rsync-is-very-slow-factor-8-to-10-compared-to-cp-on-copying-files-from-nfs-sha
- https://lwn.net/Статьи/400489/
- https://superuser.com/questions/1170636/why-is-there-a-write-speed-difference-between-dd-cp-rsync-and-macos-finder-to
- В чем разница между `cp` и `rsync`?