การเปลี่ยนชื่อไฟล์จำนวนมากใน Mac OS X เป็นการประมวลผลแบบแบตช์


57

ฉันเคยเปลี่ยนชื่อไฟล์ใน Linux ผ่านคำสั่งเปลี่ยนชื่อ:

rename 's/old_pattern/new_pattern/g' *glob

มีบางอย่างที่คล้ายกันใน Mac OS X (Snow Leopard) หรือไม่


บทความต่อไปนี้อธิบายวิธีการติดตั้งrenameบน Mac OS X: macosxhints.com/article.php?story=20050630022203488
Paul R

Backticks จะไม่ปรากฏในความคิดเห็นของคุณ - คุณควรเพิ่มนี่เป็นคำตอบหรือแก้ไขคำถามของคุณเพื่อรวมโซลูชันของคุณ
Paul R

1
ทางออกที่รวดเร็วที่สุดที่ฉันเคยพบมาคือการใช้ Automator ในตัว ลองอ่านบทความนี้เพื่อรับความช่วยเหลือทีละขั้นตอน: tuaw.com/2008/11/11/…
nilay

ฉันจะลงคะแนนคำตอบ Nilay ถ้ามันไม่ได้เป็นความคิดเห็น ...
voidstate

คำตอบ:


49

ด้วยHomebrewผู้จัดการบรรจุภัณฑ์สำหรับ OS X:

brew install rename 

จากนั้นคุณสามารถเรียกใช้renameคำสั่งเดียวกับใน Linux


3
คุณสามารถใช้แพ็คเกจ MacPorts ได้เช่นกัน: พอร์ตติดตั้ง p5-file-rename
Miquel Adrover

2
@MiquelAdrover: แต่ด้วยพอร์ตที่คุณต้องใช้rename-5.22(โดยที่ 22 คือรุ่นที่ติดตั้ง) แทนที่จะเป็นrename
mems

คุณสามารถเปลี่ยนชื่อลิงค์สัญลักษณ์sudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ako

26

ใช้พลังของ ZSH อย่างชาญฉลาด (พิมพ์zshเทอร์มินัลหากคุณเป็นหนึ่งในจิตวิญญาณที่ไม่ดีซึ่งไม่ได้ใช้งานโดยค่าเริ่มต้น):

autoload zmv
zmv '(*).htm' '$1.html'

ZMV ดังนี้ไวยากรณ์ MMV


แต่นั่นยังอนุญาตให้เปลี่ยน regex? นี่ดูเหมือนจะเป็นเพียงเปลือกบางส่วนที่ได้รับการปรับปรุงแล้ว
คณิตศาสตร์

4
@brubelsabs: ใช่zmv สามารถทำการทดแทน regexpได้ สำหรับไฟล์ที่ตรงกัน*user*.htmlให้เปลี่ยนนามสกุลเป็น.htmlและเปลี่ยนทุกสิ่งที่เกิดขึ้นrcเป็นfinal: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: ฉันคิดว่าตัวอย่างzmvในความต้องการคำตอบ-wหรือวงเล็บรอบสัญลักษณ์ตัวแทน
Chris Johnsen

ฉันชอบคำแนะนำนี้เพราะคุณไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติมบน Mac (เช่นชง) แต่มันช่วยให้คุณใช้ mmv อย่างง่ายเช่นไวยากรณ์
Hay

+1 ดี สองข้อแตกต่างจาก regex ฉันใช้: 1) ใช้*แทน.*รับทั้งหมด ดูเหมือนว่าจะทำงานเหมือนไม่โลภ*? .*?2) สำหรับฉัน^และ$สำหรับจุดเริ่มต้นและจุดสิ้นสุดของสตริงดูเหมือนจะทำให้มันตรงกับไม่มีอะไร
user56reinstatemonica8

21

เงอะงะฉัน:

for i in *.yourfiles; do mv "$i" "`echo $i | sed 's/old/new/g'`"; done 

และถ้าคุณต้องการใช้มันอย่างที่ฉันทำบ่อย ๆ ด้วยวิธีนี้:

rename 's/old/new/' *.files

ฉันแนะนำให้ใช้สคริปต์ litte นี้ใน ~ / bin / rename:

#!/usr/bin/env zsh
SUBSEXPR=$1
shift
for i in $@; do mv $i `echo "$i" | sed $SUBSEXPR`; done

สคริปต์ของคุณไม่ทำงานสำหรับฉัน "เปลี่ยนชื่อ ACDC ACDC ACDC *" result-> "ssed: ไม่สามารถอ่าน ACDC: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" ผมติดตั้งเปลี่ยนชื่อ util จากลินุกซ์และตอนนี้ก็ทำงาน anwyay
Holms

5

คุณสามารถลองติดตั้งMacPortsและติดตั้งrenameutilsแพคเกจ:

renameutils @ 0.10.0 (sysutils)

renameutils เป็นชุดของโปรแกรมที่ออกแบบมาเพื่อทำให้การเปลี่ยนชื่อไฟล์เร็วขึ้นและยุ่งยากน้อยลง


แพ็คเกจนี้ไม่มีคำสั่ง "เปลี่ยนชื่อ"
juanpablo

1
ฉันไม่ได้พูดอย่างนั้น qmvดูเหมือนว่ามันจะทำงาน
lajuette

qmvเป็นเครื่องมือที่ดีในขณะที่บิตทำงานมากเกินไปสำหรับ regex ง่ายเปลี่ยนชื่อมันเป็นที่ยอดเยี่ยมสำหรับการตั้งชื่ออย่างชาญฉลาดและการเคลื่อนย้ายตัวเลขใหญ่ของไฟล์โดยพลการ
sapht

4

มีรุ่นต่างๆของการมีการเปลี่ยนชื่อ ดูเหมือนว่าคุณกำลังมองหา Perl-based

ยูทิลิตี้หนึ่งเวอร์ชันนี้มาพร้อมกับโมดูลFile :: Rename Perl sudo cpan -i File::Renameคุณสามารถติดตั้งได้กับสิ่งที่ต้องการ

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


ทางเลือกที่เป็นzmvเครื่องมือที่มาพร้อมกับ zsh มันไม่ได้มีไวยากรณ์เดียวกัน แต่มันมาพร้อมกับระบบปฏิบัติการของคุณและมันสามารถดูแลกรณีทั่วไปจำนวนมากได้อย่างง่ายดาย


การเปลี่ยนชื่อ perlคือสิ่งที่คำถามนี้แสดงเป็นตัวอย่าง
ต้มตุ๋น quixote

2

ใน Macs ฉันใช้ Aristotle Pagaltzis ที่มีให้ฟรีrenameซึ่งเหมือนกับ Debian's คือ Perl คุณจะได้รับที่นี่ หรือเยี่ยมชมที่นี่เพื่ออ่านก่อน - เป็นความคิดที่ดีเสมอ

คุณต้องวางมันไว้ที่ไหนสักแห่งในนั้น$PATHและทำให้มันใช้งานได้ ( chmod +x rename) จากนั้นคุณก็พร้อมที่จะไป


2

สิ่งนี้ไม่ควรยาก แต่เห็นได้ชัดว่ามันคือ ตัวอย่างฉันต้องการเปลี่ยนชื่อนามสกุลไฟล์ทั้งหมดจาก aiff เป็น aifc

find . -iname "*.aiff" -exec bash -c 'mv "$0" "${0%\.aiff}.aifc"' {} \;




0

ฉันเพิ่งไปข้างหน้าและพบสิ่งที่ฉันโปรดปรานที่ฉันเคยเห็นเรียกว่าชื่อ Perl ให้เปลี่ยนrenameคำสั่งที่ช่วยมีลักษณะเช่นนี้:

Usage: rename [-v] [-n] [-f] perlexpr [filenames]

นั่นเป็นวิธีที่ฉันรู้ว่าฉันได้รับสิ่งที่ฉันชอบ

สำหรับ Mac แม้ใน Homebrew พวกเขาจะมีคนอื่น ๆ ที่ฉันเพิ่งจำได้ว่ามีปัญหา ดังนั้นมันไม่ใช่renameแพ็คเกจและไม่ใช่renameutilsแพ็คเกจnongnu เช่นกัน

รับจากที่นี่และทำการติดตั้งตามที่ระบุไว้: https://github.com/subogero/rename

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