Você pode usar mcp
do mmv
package da seguinte maneira:
mcp "*original*" "#1copy#2"
Isto irá copiar todos os arquivos contendo a string “original” no diretório atual e substituir esta string por “copy”. Você pode testar o que o mcp
fará adicionando o -n
, mas ele não substituirá os arquivos silenciosamente, mas perguntará. Usar mmv
tem a vantagem sobre cp
que você não precisa chamar para cada arquivo - com mil arquivos como você parece copiar, isso faz a diferença.
Você também pode usar GNU parallel
daseguintemaneira(--dry-run
éparateste,remova-opararealizaracópia):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
ou, se isso fornecer o erro "Argument list too long":
printf "%s$ 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
" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Exemplo de execução
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s
Vamos time
, executar mais de 1000 arquivos de 100 KiB cada em uma máquina lenta :
mcp "*original*" "#1copy#2"