Переименование многих файлов в 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
Пол Р
Обратные пометки не отображаются в вашем комментарии - вы, вероятно, должны добавить это как ответ или отредактировать свой вопрос, чтобы включить свое решение.
Пол Р
1
Лучшее быстрое решение, которое я когда-либо нашел, использовало встроенный Automator. Проверьте эту статью для легкой пошаговой помощи: tuaw.com/2008/11/11/…
nilay
Я бы проголосовал за ответ Нилай, если бы он не был комментарием ...
voidstate

Ответы:

49

С Homebrew , менеджером пакетов для OS X:

brew install rename 

Затем вы можете запускать те же renameкоманды, что и в Linux.

Хуан Пабло
источник
3
Вы также можете использовать пакет MacPorts: port install p5-file-rename
Miquel Adrover
2
@MiquelAdrover: Но с портом вам нужно использовать rename-5.22(где 22 - установленная версия) вместоrename
мемы
Вы можете переименовать символическую ссылкуsudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ако
26

Используйте силу ZSH с умом (введите zshв терминале, если вы одна из тех бедных душ, которые не используют его по умолчанию):

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

ZMV следует синтаксису MMV .

ghoppe
источник
но это также позволяет замену регулярных выражений? Похоже, это просто какая-то улучшенная оболочка оболочки.
математика
4
@brubelsabs: Да, zmv может заменить регулярное выражение . Для файлов, которые соответствуют *user*.html, измените расширение на .htmlи измените все вхождения rcна final: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: я думаю, что пример zmv в вашем ответе нуждается в -wкруглых скобках или вокруг его подстановочного знака.
Крис Джонсен
Мне действительно нравится это предложение, потому что вам не нужно устанавливать на Mac ничего лишнего (например, brew), но оно позволяет вам использовать простой синтаксис mmv.
сено
+1 Хорошо. Пара отличий от регулярных выражений, к которым я привык: 1) использовать *вместо того, .*чтобы получить все. *?кажется, работает как не жадный .*?. 2) для меня, ^а также $для начала и конца строки, казалось, что она ничего не соответствует
user56reinstatemonica8
21

Неуклюжий я

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

И если вы хотите использовать его, как я часто делаю так:

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

Я рекомендую использовать этот скрипт в ~ / bin / rename:

#!/usr/bin/env zsh
SUBSEXPR=$1
shift
for i in $@; do mv $i `echo "$i" | sed $SUBSEXPR`; done
математический
источник
ваш скрипт не работает для меня "переименовать ACDC AC-DC ACDC *" result-> "ssed: не могу прочитать ACDC: нет такого файла или каталога", я установил утилиту переименования из linux, и теперь она работает в любой момент
holms
5

Вы можете попробовать установить MacPorts и установить renameutilsпакет:

renameutils @ 0.10.0 (sysutils)

renameutils - это набор программ, предназначенных для более быстрого и менее громоздкого переименования файлов.

lajuette
источник
этот пакет не имеет команды "переименовать".
Хуанпабло
1
я не сказал, что это так. qmvПохоже, это делает работу.
Лаюетт
qmvэто отличный инструмент, хотя для простых переименований regex слишком много работы, он
отлично подходит
4

Существуют различные версии переименования . Похоже, вы ищете основанный на Perl.

Одна версия этой утилиты поставляется с модулем File :: Rename Perl. Вы можете установить его с чем-то вроде sudo cpan -i File::Rename.

Или вы можете использовать переименование из пакета perl Debian . Это всего лишь один файл для скачивания. Поместите его в любое удобное для вас место и выполните chmod, чтобы он был исполняемым.


Альтернативой является инструмент zmv , который поставляется вместе с zsh . У него нет того же синтаксиса, но он поставляется с вашей ОС, и он может легко позаботиться о многих распространенных случаях.

Крис Джонсен
источник
Perl переименовать то , что этот вопрос показывает , как пример.
Квик-кихот
2

На Mac я использую свободно доступный Аристотель Пагальцис rename, который, как и Debian, основан на Perl. Вы можете получить это здесь . Или посетите здесь, чтобы сначала прочитать его - всегда хорошая идея.

Вам нужно поместить это где-нибудь в свой файл $PATHи сделать его исполняемым ( chmod +x rename), и тогда все готово.

Телемах
источник
2

Это не должно быть сложно, но, очевидно, это так. Например, я хочу переименовать расширение всех файлов из aiff в aifc.

find . -iname "*.aiff" -exec bash -c 'mv "$0" "${0%\.aiff}.aifc"' {} \;
AlexanderN
источник
1

Если вы ищете графический интерфейс, попробуйте Name Mangler . Он имеет функцию «предварительного просмотра», которая показывает, что произойдет, если вы выполните переименование.

Питер Мюррей
источник
1

Эквивалентная команда в Renamer (кроссплатформенная)

$ renamer --regex --find 'old_pattern' --replace 'new_pattern' *glob
Lloyd
источник
0

Если вам нравится множественный выбор Sublime Text, вы можете использовать его с qmv:

qmv --editor = "/ usr / bin / s3 -w" файлы

Гордон Уэллс
источник
0

Я просто пошел дальше и обнаружил, что мой любимый объект, который я видел, называется perl-rename, давая renameкоманду, где помощь выглядит так:

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

Вот откуда я знаю, что получил тот, который мне нравится.

Для Mac, даже в Homebrew у них есть другие, где я просто смутно припоминаю проблемы. Так что это не renameпакет, и это не renameutilsпакет nongnu .

Получил это отсюда и только что сделал установку, как они упоминают: https://github.com/subogero/rename

Pysis
источник