Скопируйте и вставьте набор файлов с другим именем

У меня есть набор текстовых файлов с именем

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

Как я могу сделать это использование простого сценария?

10
задан 9 June 2018 в 08:56

2 ответа

Каталог изменения туда, где у Вас есть исходные файлы.

Затем тест со следующей командной строкой,

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
13
ответ дан 23 November 2019 в 04:21

Вы можете использовать mcp из пакета mmv Install mmv следующим образом:

mcp "*original*" "#1copy#2"

Это скопирует каждый файл, содержащий строку « оригинал »и замените эту строку на« копия ». Вы можете проверить, что будет делать mcp, добавив флаг -n, однако он не будет молча перезаписывать файлы, а спросит вас. Использование mmv имеет преимущество перед cp в том, что вам не нужно вызывать его для каждого отдельного файла - с тысячей файлов, которые, как вы, похоже, копируете, это имеет значение.

Вы также можете использовать GNU parallel Install 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
8
ответ дан 23 November 2019 в 04:21

Другие вопросы по тегам:

Похожие вопросы: