Mac os x terminal batch rename

У меня есть папка с рядом файлов с именем:

prefix_1234_567.png
prefix_abcd_efg.png

Я бы хотел, чтобы пакет удалял одно подчеркивание и среднее содержимое, поэтому выход был бы

prefix_567.png
prefix_efg.png

спасибо актуальным, но не полностью объяснимым: как я могу переименовать файлы с помощью терминала? Regex для пакетного переименования файлов в терминале OS X

Ответ 1

В вашем конкретном случае вы можете использовать следующую команду bash (bash - это оболочка по умолчанию для macOS):

for f in *.png; do echo mv "$f" "${f/_*_/_}"; done

Примечание: echo добавляется к mv, чтобы выполнить сухой прогон. Удалите его, чтобы выполнить фактическое переименование.

Вы можете запустить его из командной строки или использовать в script.

  • "${f/_*_/_}" - это приложение bash расширение параметра: (первая) строка соответствия подстроки _*_ заменяется литералом _, эффективно сокращая средний токен от имени.
  • Обратите внимание, что _*_ - это шаблон (выражение подстановки, также используемое для globbing), а не регулярное выражение (чтобы узнать о шаблонах, запустите man bash и выполните поиск Pattern Matching).

Если вы часто просматриваете файлы для переименования пакетов, рассмотрите специализированный инструмент, например, утилиту rename, основанную на Perl. В OSX вы можете установить его с помощью популярного менеджера пакетов Homebrew следующим образом: brew install rename

Здесь эквивалентная команда, использующая rename:

rename -n -e 's/_.*_/_/'  *.png

Опять же, эта команда выполняет сухой прогон; удалите -n, чтобы выполнить фактическое переименование.

  • Подобно решению bash, s/.../.../ выполняет замену текста, но - в отличие от bash - используются обычные регулярные выражения.

Ответ 2

Чтобы переименовать файлы, вы можете использовать утилиту rename:

brew install rename

Например, чтобы изменить строку поиска во всех именах файлов в текущем каталоге:

rename -nvs searchword replaceword *

Удалите параметр "n", чтобы применить изменения.

Дополнительная информация: man rename

Ответ 3

Вы можете использовать sed:

ls * | sed -e 'p;[email protected]_.*[email protected][email protected]' | xargs -n2 mv

результат:

prefix_567.png prefix_efg.png

* сначала выполнить сухой пробег, замените mv в конце на echo

Ответ 4

У меня была партия файлов, которая выглядела так: be90-01.png и нужно было изменить тире на подчеркивание. Я использовал это, которое хорошо работало:

for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done

Ответ 5

вы можете установить команду rename, используя brew. просто сделайте brew install rename и используйте его.

Ответ 6

Используя mmv

mmv '*_*_*' '#1_#3' *.png