โปรดทราบว่าคุณกำลังใช้งานสคริปต์ Perl ที่rename
จัดทำโดย Debian และตราสารอนุพันธ์ (Ubuntu, Mint, …) ลีนุกซ์รุ่นอื่น ๆ จัดส่งคำสั่งที่แตกต่างอย่างสิ้นเชิงและมีประโยชน์น้อยกว่าอย่างrename
มาก
y/A-Z/a-z/
แปลอักขระแต่ละตัวในช่วงที่A
ผ่านZ
เป็นอักขระที่ตรงกันในช่วงa
ถึงz
เช่นตัวอักษร ASCII ตัวพิมพ์ใหญ่เป็นตัวอักษรตัวพิมพ์เล็กที่สอดคล้องกัน y/a-z/A-Z/
เพื่อดำเนินการแปลตรงข้ามใช้ อีกวิธีในการเขียนคำสั่งเดียวกันคือrename '$_ = uc($_)' *
- uc
คือฟังก์ชันu pper c ase และrename
คำสั่งเปลี่ยนชื่อไฟล์ตามการแปลงที่ทำกับ$_
ตัวแปร
rename '…' *
เปลี่ยนชื่อไฟล์ในไดเรกทอรีปัจจุบันเท่านั้นเพราะนั่นคือสิ่งที่*
ตรงกัน ไฟล์ Dot (ไฟล์ที่มีชื่อขึ้นต้นด้วย.
) จะถูกข้ามเช่นกัน
หากคุณต้องการเปลี่ยนชื่อไฟล์ในไดเรกทอรีปัจจุบันและในไดเรกทอรีย่อยซ้ำคุณสามารถใช้find
คำสั่งเพื่อสำรวจไดเรกทอรีปัจจุบันซ้ำ มีความยากอยู่ที่นี่: ถ้าคุณโทรrename
สิ่งนี้จะเปลี่ยนชื่อทั้งไดเรกทอรีและส่วนชื่อฐาน หากคุณโทรหาrename
ไดเรกทอรีก่อนที่จะเรียกซ้ำ ( find -exec rename … {} \;
) find
จะสับสนเพราะพบไดเรกทอรี แต่ไดเรกทอรีนั้นไม่มีอยู่อีกต่อไปตามเวลาที่มันพยายามสืบหามัน คุณสามารถทำงานรอบนี้โดยบอกว่าfind
การสำรวจไดเรกทอรีก่อนที่จะกระทำกับมัน แต่แล้วคุณจะจบลงด้วยความพยายามที่จะเปลี่ยนชื่อfoo/bar
ไปFOO/BAR
แต่ไดเรกทอรีFOO
ไม่อยู่
วิธีง่ายๆในการหลีกเลี่ยงปัญหานี้คือการทำให้คำสั่งการเปลี่ยนชื่อดำเนินการเฉพาะในส่วนชื่อฐานของเส้นทาง การแสดงออกปกติตรงกับส่วนสุดท้ายของเส้นทางที่ไม่ได้มี([^/]*\Z)
/
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
shell zsh นำเสนอคุณสมบัติที่สะดวกกว่าสำหรับการเปลี่ยนชื่อ - ยิ่งเป็นความลับยิ่งกว่า Perl แต่ผู้ทดสอบและมักจะเขียนง่ายกว่า
ฟังก์ชั่นzmv
เปลี่ยนชื่อไฟล์ตามรูปแบบ เรียกใช้autoload -U zmv
หนึ่งครั้งเพื่อเปิดใช้งาน (ใส่บรรทัดนี้ในของคุณ.zshrc
)
ในอาร์กิวเมนต์แรกzmv
(รูปแบบที่จะเปลี่ยน), คุณสามารถใช้ zsh ที่มีประสิทธิภาพของรูปแบบสัญลักษณ์แทน ในอาร์กิวเมนต์ที่สองที่จะzmv
(ข้อความทดแทน), คุณสามารถใช้มันขยายตัวพารามิเตอร์คุณสมบัติรวมทั้งการปรับเปลี่ยนประวัติศาสตร์
zmv -w '**/*' '$1$2:u'
คำอธิบาย:
-w
- กำหนดตัวแปรตัวเลขให้กับแต่ละรูปแบบของสัญลักษณ์แทนโดยอัตโนมัติ
**/*
- ไฟล์ทั้งหมดในไดเรกทอรีย่อยซ้ำ ( **/
ตรงกับ 0, 1 หรือมากกว่าระดับของไดเรกทอรีย่อย)
$1
- ตัวแปรตัวเลขตัวแรกตรงกับส่วนไดเรกทอรีของแต่ละเส้นทาง
$2:u
- ตัวแปรตัวเลขตัวที่สองตรงกับส่วนชื่อฐานของแต่ละพา ธ พร้อม:u
ตัวปรับเพื่อแปลงค่าให้เป็นตัวพิมพ์ใหญ่
ในฐานะโบนัสที่เพิ่มเข้ามาสิ่งนี้จะคำนึงถึงการตั้งค่าสถานที่โดยรอบ
หากคุณไม่แน่ใจเกี่ยวกับzmv
คำสั่งที่คุณเขียนคุณสามารถส่ง-n
ตัวเลือกเพื่อพิมพ์สิ่งที่คำสั่งจะทำและไม่เปลี่ยนแปลงอะไร ตรวจสอบผลลัพธ์และหากเป็นไปตามที่คุณต้องการให้รันคำสั่งอีกครั้งโดยไม่ต้อง-n
ทำอะไร
rename 'y/a-z/A-Z/' *
คุณจะได้รับสิ่งที่คุณต้องการ ระวังที่คุณทดสอบผ่าน