Мой набор файлов назван в соответствии с часовым поясом GMT. Я успешно переименовал и преобразовал все файлы в нужный часовой пояс, выполнив следующие действия.
1. Этот код удаляет все расширения файлов .gif rename "s/.gif//g" *
2. Этот код преобразует и переименовывает все файлы for f in *; do mv -v -- "$f" "$(date -d "$f" '+%Y%m%d%H%M')"; done
‘15Z29Aug2017’ -> ‘201708292030’
К сожалению, я должен установить расширение .gif еще раз для всех файлов, используя [ 113]
Как именно можно пропустить удаление расширения файла, отредактировав мой код на шаге 2?
Шаг 2, взятый из: Как я могу выполнить пакетное преобразование имен папок из одного формата даты к другому
Все, что вам нужно, это убрать .gif
из $f
и снова включить его:
for f in *; do mv -v -- "$f" "$(date -d "${f%%.gif}" '+%Y%m%d%H%M')".gif; done
${f%%.gif}
принимает переменную f
и удаляет последнюю (следовательно, #
два раза ) в нем .gif
, поэтому даже странное имя файла, например 1.gif2.gif
, удалит только его последний .gif
. Эта удивительная функция называется Bash Parameter Expansion , и когда вы будете искать ее по этому имени, вы сможете прочитать все о ее великолепной силе, e. г. на этот Bash FAQ - он способен на гораздо большее!