Puede usarlo mcp
desde el mmv
paquete de la siguiente manera:
mcp "*original*" "#1copy#2"
Esto copiará cada archivo que contenga la cadena "original" en el directorio actual y reemplazará esta cadena con "copia". Puede probar qué mcp
hará agregando la -n
bandera, sin embargo, no sobrescribirá silenciosamente los archivos, sino que le preguntará. El uso mmv
tiene la ventaja sobre cp
que no tiene que llamarlo para cada archivo individual; con mil archivos como parece copiar, eso hace la diferencia.
También puede usar GNUparallel
de la siguiente manera ( --dry-run
es para probar, eliminarlo para realizar la copia):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
o, si eso da el error "Lista de argumentos demasiado larga":
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Ejecución de ejemplo
$ 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
a ejecutar más de 1000 archivos de 100 KiB cada uno en una máquina lenta :
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s