Ви можете використовувати 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