пакетное переименование терминала mac os x



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



prefix_1234_567.png
prefix_abcd_efg.png


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



prefix_567.png
prefix_efg.png


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

609   7  

7 ответов:

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

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

Примечание: Если есть шанс, что ваши имена начинаются с -, место -- перед ними[1]:
mv -- "$f" "${f/_*_/_}"

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

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

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

если вы часто находите себе пакетные переименования файлов,рассмотрите возможность установки специализированного инструмента, такого как Perl-based rename утилиты. На macOS вы можете установить его с помощью популярного диспетчера пакетов доморощенного следующим образом:

brew install rename

вот эквивалент команды в верхней части с помощью rename:

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

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

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

[1] цель специального аргумента --, который поддерживается большинством утилит, должен сигнализировать, что последующие аргументы должны рассматриваться как операнды (значения), даже если они посмотреть как опции из-за начиная с -, а Jacob C. Примечание.

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

brew install rename

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

rename -nvs searchword replaceword *

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

Подробнее: man rename

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

ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv

результат:

prefix_567.png prefix_efg.png

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

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

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

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

используя mmv

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

попробуй такое

for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done

вот еще один способ:

for file in Name*.png; do mv "$file" "01_$file"; done

Comments

    Ничего не найдено.