Переименование многих файлов в 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 .


но это также позволяет замену регулярных выражений? Похоже, это просто какая-то улучшенная оболочка оболочки.
математика

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 - это набор программ, предназначенных для более быстрого и менее громоздкого переименования файлов.


этот пакет не имеет команды "переименовать".
Хуанпабло

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"' {} \;

1

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


1

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

$ renamer --regex --find 'old_pattern' --replace 'new_pattern' *glob

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.