Вы можете использовать mcp
из mmv
пакета следующим образом:
mcp "*original*" "#1copy#2"
Это скопирует каждый файл, содержащий строку «original» в текущем каталоге, и заменит эту строку на «copy». Вы можете проверить, что mcp
будет делать, добавив -n
флаг, однако он не будет перезаписывать файлы без вывода сообщений, а спросит вас. mmv
Преимущество использования заключается в том, cp
что вам не нужно вызывать его для каждого отдельного файла - с тысячей файлов, которые вы, похоже, копируете, это имеет значение.
Вы также можете использовать GNUparallel
следующим образом ( --dry-run
для тестирования удалите его для выполнения копирования):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
или, если это приводит к ошибке «Список аргументов слишком длинный»:
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Пример запуска
$ ls -1
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_original.in
$ mcp "*original*" "#1copy#2"
$ ls -1
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_copy.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_copy.in
foo_bar_abc_1_04_geh_original.in
Давайте time
запустим более 1000 файлов по 100 КиБ на медленной машине:
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s