ฉันจะย้ายตัวเลขในชื่อไฟล์ในการดำเนินการเปลี่ยนชื่อแบตช์ได้อย่างไร


13

ฉันพยายามหาวิธีเปลี่ยนชื่อไฟล์ในสองสามชั่วโมงที่ผ่านมา

ฉันมีไฟล์ 2,000 ไฟล์ที่เป็นเช่นนี้:

file.1.pdb
file.2.pdb
file.3.pdb

ฉันต้องการเปลี่ยนชื่อไฟล์เหล่านี้เป็นดังนี้:

file.pdb.1
file.pdb.2
file.pdb.3

คุณไม่ได้หมายถึงทุบตี ?
avazula

4
@avazula ไม่โปรดอ่านบทความนี้: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh

@PerlDuck ใช่;)
Ali Razmdideh


2
สวัสดีผู้มีสิทธิเลือกตั้งปิด - คุณคิดว่าเราต้องการเพียงหนึ่งคำถามในแท็ก [ชุดเปลี่ยนชื่อ]? มีอะไรในโพสต์ที่เชื่อมโยงซึ่งช่วยงานในคำถามนี้ได้จริงยกเว้นแนวคิดของการใช้งานrenameหรือไม่ ดูเหมือนว่าผมว่าถ้าเป็นชุดคำถามเปลี่ยนชื่อมีรายละเอียดที่เฉพาะเจาะจงเราก็ควรจะให้คำตอบที่เฉพาะเจาะจงกับมัน
Zanna

คำตอบ:


15

หากคุณrenameติดตั้งแล้วคุณสามารถใช้

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

คำสั่งrenameสามารถติดตั้งผ่าน

sudo apt install rename

11

ผ่านmmv(เปลี่ยนชื่อหลายไฟล์ตามรูปแบบสัญลักษณ์แทน) เป็นเรื่องง่าย:

mmv '*.*.*' '#1.#3.#2' *.pdb

หรือzmvของzshเปลือก; เป็นโมดูลที่อนุญาตให้ทำการเปลี่ยนชื่อ ดูZMV- ตัวอย่าง :

zmv -w '*.*.*' '$1.$3.$2' *.pdb

3
ทั้งสองmmvและzmvดูเหมือนค่อนข้างแปลกใหม่ให้ฉัน คุณคิดอย่างละเอียดว่าพวกเขาคืออะไรและพวกเขาทำอะไร?
PerlDuck

2
ฉันเพิ่มลิงก์ไปยัง manpage และตัวอย่างของพวกเขา
αғsнιη

mmvสวยเท่ห์ ดูเหมือนจะเหมาะกว่าสำหรับการเปลี่ยนชื่อประเภทนี้มากกว่าrenameแม้ว่าจะมีความยืดหยุ่นน้อยกว่าในแง่ของการจับคู่ชื่อ
JAB

11

ใช้ Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

คำอธิบายอย่างรวดเร็ว:

  • *.pdb.pdbตรงกับไฟล์ทั้งหมดที่ลงท้ายด้วย (ทำโดยเปลือก)
  • (\.\d+)จับคู่ตัวอักษรตามด้วยตัวเลขทศนิยมหนึ่งหลักขึ้นไป parens สร้างกลุ่มการจับคู่
  • $2$1 ย้อนกลับกลุ่มการจับคู่ครั้งแรกและครั้งที่สอง
  • -nไม่มีการกระทำ (จำลอง) หากเอาต์พุตดูดีให้รันคำสั่งอีกครั้งโดยไม่มีแฟล็กนี้

1
ฮ่า ๆ. คิดเหมือนกัน คุณเร็วขึ้น 48 วินาที
PerlDuck

1
@PerlDuck Lol ใช่ความคิดเดียวกัน คำตอบนั้นค่อนข้างดีเช่นกัน: คุณครอบคลุมการติดตั้งฉันครอบคลุมไวยากรณ์
wjandrea

7

คุณสามารถใช้สคริปต์นี้:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

หรือคำสั่งที่ง่ายต่อการคัดลอกวาง:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

สำหรับการใช้งานคำสั่งข้างต้นให้ใส่ไฟล์ทั้ง 2000 ไฟล์ไว้ในโฟลเดอร์เดียวจากนั้นเปิดเทอร์มินัลในไดเรกทอรีนั้นจากนั้นเรียกใช้คำสั่งด้านบน


5

เมื่อไม่นานมานี้ตัวจัดการไฟล์เริ่มต้นได้รับกล่องโต้ตอบการเปลี่ยนชื่อแบบแบตช์ ยังไม่มีพลังมากพอที่จะทำในสิ่งที่คุณต้องการ แต่โชคดีที่มี thunar เป็นตัวจัดการไฟล์สำรองที่สามารถติดตั้งได้ ด้วยกล่องโต้ตอบการเปลี่ยนชื่อ thunars คุณสามารถทำสิ่งที่คุณต้องการโดยใช้ GUI

ติดตั้ง thunar ครั้งแรก:

sudo apt install thunar

เริ่มที่ดวงจันทร์นำทางไปยังไดเรกทอรีที่มีไฟล์ของคุณ จากนั้นเลือกทั้งหมด F2กด

ในช่องโต้ตอบที่เปิดขึ้นให้เลือกไฟล์ทั้งหมดอีกครั้ง เปลี่ยนโหมดเป็น "ค้นหาและแทนที่" และ "ชื่อ & ส่วนต่อท้าย" ทำเครื่องหมายที่ "นิพจน์ปกติ" ตอนนี้ใช้สิ่งต่อไปนี้เป็นการค้นหาและแทนที่รูปแบบ:

file\.(.+)\.pdb

และ

file.pdb.$1

ในที่สุดคลิกปุ่มเปลี่ยนชื่อ

ข้อดีของวิธีนี้คือคุณได้รับตัวอย่างภาพของสิ่งที่จะเกิดขึ้นก่อนที่คุณจะทำการเปลี่ยนชื่อจริง

ไดอะล็อกเปลี่ยนชื่อ thunar


1
คุณสามารถทำให้โปรแกรมส่วนใหญ่พิมพ์ข้อความภาษาอังกฤษโดยคำขึ้นต้นคำสั่งด้วยเช่นLC_MESSAGES=POSIX LC_MESSAGES=POSIX freeการทำงานเหมือนกันสำหรับโปรแกรมกราฟิกแม้ว่าในกรณีของการใช้งานถาวรเช่น Nautilus ในการกำหนดค่าเริ่มต้นที่คุณต้องการที่จะยุติเช่นก่อนหน้านี้มีnautilus -qครั้งแรก
David Foerster

@DavidFoerster ขอบคุณที่กล่าวถึงภาพที่ถูกแทนที่
เซบาสเตียนสตา

3

คุณสามารถใช้renameจากutil-linuxสำหรับสิ่งนี้ (คำสั่งถูกเรียกrename.ulในอูบุนตู):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

การดำเนินการนี้เป็นการลบ.pdbส่วนขยายออกจากจุดสิ้นสุดก่อนจากนั้นแทรกส่วนขยายลงในกึ่งกลาง


1
สวยเท่ห์ rename.ulผมก็ไม่ทราบ ไวยากรณ์เป็นบิตหนอไม่คาดคิด แต่ใช้งานได้จริงตามที่คุณโฆษณา บวก: มันยังมี-nสวิตช์ (อย่าแตะต้องบอก)
PerlDuck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.