パッケージmcp
から次のように使用できます。mmv
mcp "*original*" "#1copy#2"
これにより、文字列「original」を含むすべてのファイルが現在のディレクトリにコピーされ、この文字列が「copy」に置き換えられます。フラグをmcp
追加することで何が行われるかをテストでき-n
ますが、警告なしにファイルが上書きされることはありませんが、尋ねられます。を使用すると、1つのファイルごとに呼び出す必要がないmmv
という利点がcp
あります。コピーしたように見えるファイルが1000個あるため、違いが生じます。
以下の方法でGNUparallel
を使用することもできます(--dry-run
テスト用であり、削除してコピーを実行します)。
parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *
または、「引数リストが長すぎます」エラーが発生した場合:
printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"
実行例
$ 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
それではtime
、遅いマシンでそれぞれ100 KiBの1000以上のファイルを実行してみましょう。
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s