Batch Rename Files ในโฟลเดอร์


10

ฉันจะดึงข้อความบางส่วนออกจากชื่อไฟล์ในโฟลเดอร์ได้อย่างไร

ฉันกำลังพยายาม:

rename s/"NEWER_(.*?)"//g *

แต่มันก็ไม่ได้รับการเปลี่ยนชื่อ

ฉันมีโฟลเดอร์พาเรนต์ซึ่งมีโฟลเดอร์ย่อยมากมายอยู่ภายในคือไฟล์ที่ OneDrive คิดว่าเป็นความคิดที่ดีในการผนวก "(NEWER_timestamp)" ต่อท้ายและฉันต้องการลบออก

ตัวอย่างชื่อไฟล์:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
คุณสามารถโพสต์ชื่อไฟล์ตัวอย่างได้หรือไม่?
muru

แน่ใจ อัปเดตคำถามกับบางคน
Kevin

คำตอบ:


8

ลองทำสิ่งต่อไปนี้:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • ทั้งหมดที่ตรงกันเท่านั้นส่วนสุดท้ายของเส้นทางที่ไม่ได้มี[^/]*(.*) .*$ /และ
  • ใน regex ข้างต้น(.*)จะเป็นกลุ่มของทุกอย่างที่ตรงกันหลังจากที่ผ่านมาและก่อนที่พื้นที่/ กลับอ้างอิงของมันจะเป็น$1
  • .*$จับคู่ทุกอย่างกับจุดสิ้นสุด$ของชื่อไฟล์หลังจากที่ว่าง
  • ในที่สุดในการแทนที่การเปลี่ยนชื่อส่วนs/.../REPLACEMENT/เราเพิ่งเก็บกลุ่มที่จับคู่ที่อยู่ระหว่างสุดท้าย\และช่องว่าง(.*)ที่เรียกว่ากลุ่มของการจับคู่

2

คุณควรพิจารณาการใช้คำพูดที่อยู่นอก regex ไม่ (ภายในพวกเขาจะถูกนำตัวอักษรเป็นคำพูด) (และการหลบหนี ลอง;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

ความแม่นยำในการแสดงออกอาจไม่จำเป็น แต่คุณไม่ควรระมัดระวังเมื่อทำการแก้ไขไฟล์


ทั้งหมดนี้กำลังทำอยู่ก็คือreading filenames from STDINฉันอยู่ในโฟลเดอร์พาเรนต์แล้วไฟล์เหล่านี้คืออะไร
Kevin

@Kevin "หากไม่มีการระบุชื่อไฟล์ในบรรทัดคำสั่งชื่อไฟล์จะถูกอ่านผ่านอินพุตมาตรฐาน" และเนื่องจากเชลล์ปล่อย*NEWER*ให้มันเป็นหากไม่พบการขยายคุณต้องทำผิดพลาดหรือใช้เชลล์ที่แทนที่ wildcard ที่ไม่ตรงกันซึ่งไม่มีอะไร
muru

คัดลอกและวางลงใน Ubuntu 14.10 shell
Kevin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.