คุณสามารถใช้mcp
จากmmv
แพ็คเกจในวิธีต่อไปนี้:
mcp "*original*" "#1copy#2"
สิ่งนี้จะคัดลอกทุกไฟล์ที่มีสตริง“ ดั้งเดิม” ในไดเรกทอรีปัจจุบันและแทนที่สตริงนี้ด้วย“ คัดลอก” คุณสามารถทดสอบสิ่งที่mcp
จะทำโดยการเพิ่มการ-n
ตั้งค่าสถานะอย่างไรก็ตามมันจะไม่เขียนทับไฟล์อย่างเงียบ ๆ แต่ขอให้คุณ การใช้mmv
มีข้อได้เปรียบมากกว่าcp
ที่คุณไม่ต้องเรียกมันว่าสำหรับทุก ๆ ไฟล์ - ด้วยหนึ่งพันไฟล์อย่างที่คุณดูเหมือนจะคัดลอกซึ่งสร้างความแตกต่าง
คุณสามารถใช้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
มันรันมากกว่า 1,000 ไฟล์ที่มี 100 KiB ต่อไฟล์บนเครื่องที่ช้า :
$ time mcp "*original*" "#1copy#2"
real 0m1.114s
user 0m0.000s
sys 0m0.132s