Ви можете використовувати mcpз mmvпакету
наступним чином:
mcp "*original*" "#1copy#2"
Це скопіює кожен файл, що містить рядок "оригінал" у поточному каталозі, і замінить цей рядок на "копіювати". Ви можете перевірити, що 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