Похожие вопросы

Проблема с неправильной командой, введенной в Fish-shell, и ее выводом
Как использовать терминал для входа на другой компьютер mac?
Запустить сеанс PuTTy на удаленном хосте по сети
Bash-скрипт - проблема диалога контрольный список
/dev / tty: нет такого устройства или адреса - только в скрипте
Windows 10 Bash команда не работает, несмотря на включение режима разработчика и включение " Подсистема Windows для Linux"
Ruby shell вместо bash shell в Ubuntu?
Как остановить терминал bash от добавления частей предыдущих команд в текущую строку?
Рекурсивно выполнить команду Linux 'ar'
Как запустить SAMBA на MAC OS X с терминала?
Отправка имитированных нажатий клавиш в Bash
Как проверить, доступно ли подключение к Интернету через терминал
Как передать параметр в команду linux в конце строки
Скрипт Bash, который автоматически меняет раскладки клавиатуры и мыши на основе активного окна
Символы UTF8 в терминале bash windows 10

Unix Bash переименование файлов с помощью регулярных выражений

Я хотел бы переименовать все файлы из папки с помощью регулярного выражения(добавить имя в конец имени) и перейти в другую папку.

Это мое мнение, оно должно выглядеть так:

mv -v ./images/*.png ./test/*test.png, но он не работает.

может кто-нибудь предложить мне решение?

5
задан dlamblin
источник

3 ответов

мне также нравится команда rename, которую опубликовал Джон т, но она доступна не во всех системах. Это должно работать везде:

for i in *.png; do mv -v $i `basename $i .png`.test.png; done
6
отвечен Hal Pomeranz 2009-12-25 14:52:26
источник

есть удобный скрипт переименования файлов perl, который устанавливается с основным пакетом Perl в системах на базе Debian (включая Ubuntu). Его обычно называют rename, но иногда называется prename (Perl переименовать). Используйте следующим образом:

rename expr file1 file2 file3

команда использует Perl для вычисления expr для каждого file аргумент, и он переименовывает каждый файл в вывод expr нарушений. Итак, для простых замен регулярных выражений, таких как ваш пример:

rename 's(images/(.*)\.png$)(test/.test.png)' ./images/*

# here's the expression:
# s()()   -- just like s/// (but i don't need to escape the / in the filename)
#   match regex:  images/(.*)\.png$     -- match filenames of the form images/*.png
#   replace:      test/.test.png     -- turn them into test/*.test.png

если файлы не совпадение с выражением (например, не PNG-файлы), подстановка ничего не сделает и их имена файлов не будут изменены.

7
отвечен quack quixote 2009-12-25 17:18:44
источник

можно использовать rename, который принимает регулярные выражения или основной синтаксис 3 аргументов:

rename .png .test.png *.png
  • первый аргумент - что заменить в имени файла
  • второй аргумент-что заменить на
  • третий аргумент - какие файлы выполнять операцию над, в данном случае, всеми png.
2
отвечен John T 2009-12-25 14:57:15
источник

Другие вопросы bash mv rename