Możesz użyć mcp
z mmv
pakietu w następujący sposób:
mcp "*original*" "#1copy#2"
Spowoduje to skopiowanie każdego pliku zawierającego ciąg „oryginał” w bieżącym katalogu i zastąpienie tego ciągu ciągiem „copy”. Możesz przetestować, co mcp
zrobisz, dodając -n
flagę, jednak nie będzie ona po cichu zastępować plików, ale poprosi o to. Korzystanie mmv
ma tę zaletę cp
, że nie trzeba wywoływać go dla każdego pliku - z tysiącem plików, które wydaje się kopiować, to robi różnicę.
Możesz również użyć GNUparallel
w następujący sposób ( --dry-run
do testowania, usuń go, aby wykonać kopiowanie):
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
lub, jeśli daje to błąd „Zbyt długa lista argumentów”:
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
Przykładowy przebieg
$ 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
Spójrzmy time
, uruchom ponad 1000 plików po 100 KiB każdy na wolnym komputerze:
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s