У меня есть набор текстовых файлов с именем
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_1000_geh_original.in
Я хотел бы скопировать (и сохранить исходные файлы) каждый файл и вставка к различным именам (в той же папке) как,
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in
Как я могу сделать это использование простого сценария?
Каталог изменения туда, где у Вас есть исходные файлы.
Затем тест со следующей командной строкой,
for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done
и если это выглядит хорошим, удалить echo
и сделайте копирование,
for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done
Вы можете использовать mcp
из пакета mmv
следующим образом:
mcp "*original*" "#1copy#2"
Это скопирует каждый файл, содержащий строку « оригинал »и замените эту строку на« копия ». Вы можете проверить, что будет делать mcp
, добавив флаг -n
, однако он не будет молча перезаписывать файлы, а спросит вас. Использование mmv
имеет преимущество перед cp
в том, что вам не нужно вызывать его для каждого отдельного файла - с тысячей файлов, которые, как вы, похоже, копируете, это имеет значение.
Вы также можете использовать GNU parallel
следующим образом (--dry-run
для тестирования, удалите его для выполнения копирования):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
[ 1123] или, если это приводит к ошибке «Список аргументов слишком длинный»:
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