Когда дело доходит до файлового ввода-вывода , дорогостоящая задача - перемещать данные.
Если он находится в файловой системе (а это должно быть для ln
, чтобы работать), то разница спорный.
В каждом случае все, что происходит, - это модификация записи каталога, указывающая на другой индексный дескриптор. В лучшем случае это будет лишь незначительная разница, поэтому вы действительно сравниваете, «насколько быстро запускаются команды».
Но с одной оговоркой - что последняя команда оставит / pathA / fileA
на месте - это жесткая ссылка, заставляющая обе записи каталога указывать на одни и те же данные.
Это может запутать людей в будущем, потому что, если они перезапишут fileA, он сделает одно, а если они отредактируют , он сделает что-то другое.
Так что просто ошибитесь в сторону простого - придерживайтесь только mv
. В целом это не будет иметь большого значения, и это наиболее ясно показывает, чего вы на самом деле пытаетесь достичь.
Использование GNU Parallel:
parallel my_process {} ::: files*
Будет запущено по одному my_process file
на каждый поток ЦП.
Вы можете указать GNU Parallel убедиться, что 10 ГБ ОЗУ свободны, прежде чем он начнет следующее задание.:
parallel --memfree 10G my_process {} ::: files*
Если свободное пространство памяти упадет ниже 5G, GNU Parallel прервет самое новое задание и перезапустит его, когда снова станет 10G свободным.
gnu parallel может это сделать. В Debian выполните apt-get install parallel
. Тогда читайте инструкцию.
Параллельный Gnu работает так же, как xargs
, но лучше решает, запускать ли больше параллельных процессов.
(make
тоже может это сделать.)