คัดลอกและวางกลุ่มของไฟล์ด้วยชื่ออื่น


10

ฉันมีไฟล์ข้อความจำนวนมากที่มีชื่อ

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_1000_geh_original.in

ฉันต้องการคัดลอก (และเก็บไฟล์ต้นฉบับ) แต่ละไฟล์และวางในชื่อต่าง ๆ (ในโฟลเดอร์เดียวกัน) เช่น

foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in

ฉันจะทำสิ่งนี้โดยใช้สคริปต์อย่างง่ายได้อย่างไร

คำตอบ:


13

เปลี่ยนไดเรกทอรีเป็นตำแหน่งที่คุณมีไฟล์ต้นฉบับ

จากนั้นทดสอบด้วยบรรทัดคำสั่งต่อไปนี้

for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done

และถ้ามันดูดีเอาออกechoและทำสำเนา

for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done

8

คุณสามารถใช้mcpจากmmvแพ็คเกจติดตั้ง 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.