Переименуйте файлы, добавьте дефисы после четвертого и шестого символов.

Переименуйте файлы, добавьте дефисы после четвертого и шестого символов.

У меня есть несколько файлов, таких как:

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

Их нужно переименовать как

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

Я пробовал использоватьреализация perlпринадлежащийrenameкоманда(см. мой комментарий к принятому ответу), но мне это не удалось.

решение1

Использование встроенного расширения подстрок bash:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

решение2

С sed:

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

решение3

Хотя renameэто очень мощный инструмент, я обычно предпочитаю простотуmmv(многократный ход) полезность:

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

В ?шаблоне поиска обозначает один символ, *для произвольной последовательности символов. В шаблоне замены каждый #<number>обозначает соответствующий ?или *в шаблоне поиска. В дополнение к ?и *поддерживает mmvдиапазоны символов в скобках (например [a-f]).

( mmvперед началом работы будет выполнена проверка на наличие конфликтов при переименовании, поэтому вы не рискуете потерять файлы из-за перезаписи.)

решение4

В моем дистрибутиве есть perl-renameкоманда, которая может использовать регулярное выражение в стиле perl для массового переименования файлов. Команда renameпринимает только пару фиксированных строк для переименования.

Связанный контент