Você pode usar mcp
do mmv
pacote da seguinte maneira:
mcp "*original*" "#1copy#2"
Isso copiará todos os arquivos que contêm a string "original" no diretório atual e substituirá essa string por "copy". Você pode testar o que mcp
fará adicionando o -n
sinalizador, mas ele não substituirá silenciosamente os arquivos, mas solicitará. O uso mmv
tem a vantagem de cp
que você não precisa chamá-lo para cada arquivo - com mil arquivos como você parece copiar, isso faz a diferença.
Você também pode usar o GNUparallel
da seguinte maneira ( --dry-run
é para testar, remova-o para realizar a cópia):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
ou, se isso der o erro "A lista de argumentos é muito longa":
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Exemplo de execução
$ 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
Vamos time
lá, execute mais de 1000 arquivos de 100 KiB cada um em uma máquina lenta :
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s