โปรดทราบว่าคุณกำลังใช้งานสคริปต์ 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/' *คุณจะได้รับสิ่งที่คุณต้องการ ระวังที่คุณทดสอบผ่าน