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