Bash Unix переименовывает файлы с помощью regex

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

Это мое мнение, это должно быть похожим на это:

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

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

4
задан 25.12.2009, 20:51

3 ответа

Я также как переименовать команда, что John T отправленный, но это не доступно во всех системах. Это должно работать везде:

for i in *.png; do mv -v $i `basename $i .png`.test.png; done
6
ответ дан 07.12.2019, 19:09

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

rename expr file1 file2 file3

Команда использует Perl для оценки expr для каждого file аргумент, и это переименовывает каждый файл к выводу expr evalutation. Так, для простых regex замен как Ваш пример:

rename 's(images/(.*)\.png$)(test/$1.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/$1.test.png     -- turn them into test/*.test.png

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

7
ответ дан 07.12.2019, 19:09

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

rename .png .test.png *.png
  • Первый аргумент - то, что заменить в имени файла
  • Второй аргумент - то, что заменить его
  • Третий аргумент что файлы выполнить операцию на, в этом случае, весь pngs.
3
ответ дан 07.12.2019, 19:09

Теги

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