Скопіюйте та вставте купу файлів з різною назвою


10

У мене є купа текстових файлів з назвою

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

Як я можу це зробити за допомогою простого сценарію?

Відповіді:


13

Змініть каталог, де ви маєте оригінальні файли.

Потім тестуйте за допомогою наступного командного рядка,

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

8

Ви можете використовувати mcpз mmvпакетуВстановити 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.