Mengganti nama banyak file di Mac OS X, pemrosesan batch

57

Saya biasa mengganti nama file di Linux melalui perintah rename:

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

Apakah ada yang serupa di Mac OS X (Snow Leopard)?

matematika
sumber
Artikel berikut menjelaskan cara menginstal renamedi Mac OS X: macosxhints.com/article.php?story=20050630022203488
Paul R
Backticks tidak muncul dalam komentar Anda - Anda mungkin harus menambahkan ini sebagai jawaban atau mengedit pertanyaan Anda untuk memasukkan solusi Anda.
Paul R
1
Solusi cepat terbaik yang pernah saya temukan telah menggunakan Automator bawaan. Lihatlah artikel ini untuk bantuan langkah demi langkah yang mudah: tuaw.com/2008/11/11/…
nilay
Saya akan memilih jawaban nilay jika itu bukan komentar ...
voidstate

Jawaban:

49

Dengan Homebrew , manajer paket untuk OS X:

brew install rename 

Kemudian Anda dapat menjalankan renameperintah yang sama seperti di Linux.

juanpablo
sumber
3
Anda dapat menggunakan paket MacPorts juga: port install p5-file-rename
Miquel Adrover
2
@MiquelAdrover: Tetapi dengan port yang perlu Anda gunakan rename-5.22(di mana 22 adalah versi yang diinstal) alih-alihrename
mems
Anda dapat mengganti nama tautan simboliksudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ako
26

Gunakan kekuatan ZSH dengan bijak (ketik zshdi terminal jika Anda adalah salah satu dari jiwa-jiwa miskin yang tidak menggunakannya secara default):

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

ZMV mengikuti sintaks MMV .

ghoppe
sumber
tetapi apakah itu juga memungkinkan penggantian regex? Ini tampaknya hanya semacam semacam shell globbing yang disempurnakan.
matematika
4
@brubelsabs: Ya, zmv dapat melakukan penggantian regexp . Untuk file yang cocok *user*.html, ubah ekstensi menjadi .htmldan ubah semua kemunculan rcke final: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: Saya pikir contoh zmv dalam kebutuhan jawaban Anda -watau tanda kurung di sekitar wildcard-nya.
Chris Johnsen
Saya sangat suka saran ini karena Anda tidak perlu menginstal apa pun tambahan pada Mac (seperti minuman), tetapi itu memungkinkan Anda untuk menggunakan mmv mudah seperti sintaks.
Hay
+1 Bagus. Beberapa perbedaan dari regex saya terbiasa: 1) menggunakan *alih-alih .*mendapatkan semua. *?tampaknya bekerja seperti orang yang tidak tamak .*?. 2) untuk saya, ^dan $untuk memulai dan mengakhiri string sepertinya tidak cocok dengan apa pun
user56reinstatemonica8
21

Kikuk saya:

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

Dan jika Anda ingin menggunakannya seperti yang sering saya lakukan dengan cara ini:

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

Saya merekomendasikan untuk menggunakan skrip litte ini di ~ / bin / rename:

#!/usr/bin/env zsh
SUBSEXPR=$1
shift
for i in $@; do mv $i `echo "$i" | sed $SUBSEXPR`; done
matematika
sumber
skrip Anda tidak berfungsi untuk saya "rename ACDC AC-DC ACDC *" result-> "ssed: tidak dapat membaca ACDC: Tidak ada file atau direktori", saya menginstal rename util dari linux dan sekarang berfungsi lagi
holms
5

Anda dapat mencoba menginstal MacPorts dan menginstal renameutilspaket:

renameutils @ 0.10.0 (sysutils)

renameutils adalah seperangkat program yang dirancang untuk membuat pengubahan nama file lebih cepat dan tidak rumit

kecepatanette
sumber
paket ini tidak memiliki perintah "ganti nama".
juanpablo
1
saya tidak mengatakan itu. qmvSepertinya itu berhasil.
lajuette
qmvadalah alat yang hebat, sementara sedikit terlalu banyak bekerja untuk penggantian nama regex sederhana, itu fantastis untuk penamaan cerdas dan memindahkan sejumlah besar file sewenang-wenang
sapht
4

Ada berbagai versi rename . Sepertinya Anda mencari yang berbasis Perl.

Satu versi utilitas ini dilengkapi dengan modul File :: Rename Perl. Anda dapat menginstalnya dengan sesuatu seperti sudo cpan -i File::Rename.

Atau, Anda bisa pergi dengan mengganti nama dari paket perl Debian . Ini hanya satu file untuk diunduh. Letakkan di mana saja Anda suka dan chmod sehingga dapat dieksekusi.


Alternatifnya adalah alat zmv yang dilengkapi dengan zsh . Ini tidak memiliki sintaks yang sama, tetapi ia datang dengan OS Anda dan dapat dengan mudah menangani banyak kasus umum.

Chris Johnsen
sumber
yang perl mengubah nama adalah apa pertanyaan ini menunjukkan sebagai contoh.
quack quixote
2

Pada Mac saya menggunakan Aristoteles Pagaltzis yang tersedia secara gratis rename, yang seperti Debian berbasis Perl. Anda bisa mendapatkannya di sini . Atau kunjungi di sini untuk membacanya dulu - selalu ide yang bagus.

Anda perlu menempatkannya di suatu tempat di dalam Anda $PATHdan membuatnya dapat dieksekusi ( chmod +x rename) dan kemudian Anda siap melakukannya.

Telemakus
sumber
2

Ini seharusnya tidak sulit tetapi ternyata memang demikian. Contoh, saya ingin mengganti nama semua ekstensi file dari aiff ke aifc.

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

Jika Anda mencari GUI, coba Name Mangler . Ini memiliki fitur "pratinjau" yang menunjukkan apa yang akan terjadi jika Anda mengikuti penggantian nama.

Peter Murray
sumber
1

perintah setara dalam renamer (cross-platform) adalah

$ renamer --regex --find 'old_pattern' --replace 'new_pattern' *glob
Lloyd
sumber
0

Jika Anda suka multiseleksi Sublime Text, Anda bisa menggunakannya dengan qmv:

file qmv --editor = "/ usr / bin / s3 -w"

Gordon Wells
sumber
0

Saya hanya pergi ke depan dan menemukan favorit saya yang saya lihat disebut perl-rename memberikan renameperintah di mana bantuan terlihat seperti ini:

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

Begitulah cara saya tahu saya mendapatkan yang saya sukai.

Untuk Mac, bahkan di Homebrew mereka memiliki orang lain di mana saya samar-samar ingat mengalami masalah. Jadi bukan renamepaket, dan bukan renameutilspaket nongnu juga.

Dapatkan dari sini dan baru saja menginstal seperti yang mereka sebutkan: https://github.com/subogero/rename

Pisis
sumber