Vous pouvez utiliser à mcp
partir du mmv
package de la manière suivante:
mcp "*original*" "#1copy#2"
Cela copiera chaque fichier contenant la chaîne «original» dans le répertoire courant et remplacera cette chaîne par «copier». Vous pouvez tester ce mcp
qui fera en ajoutant l' -n
indicateur, mais il n'écrasera pas silencieusement les fichiers, mais vous le demandera. L'utilisation mmv
a l'avantage de cp
ne pas avoir à l'appeler pour chaque fichier - avec mille fichiers comme ceux que vous semblez copier, cela fait une différence.
Vous pouvez également utiliser GNUparallel
de la manière suivante (à des --dry-run
fins de test, supprimez-la pour effectuer la copie):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
ou, si cela donne l'erreur "Argument list too long":
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Exemple d'exécution
$ 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
Disons-le time
, exécutez plus de 1000 fichiers de 100 Ko chacun sur une machine lente :
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s