Переименовать и конвертировать даты в имени файла без расширения файла

Мой набор файлов назван в соответствии с часовым поясом 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, взятый из: Как я могу выполнить пакетное преобразование имен папок из одного формата даты к другому

2
задан 12 November 2017 в 22:03

1 ответ

Все, что вам нужно, это убрать .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 - он способен на гораздо большее!

0
ответ дан 12 November 2017 в 22:03

Другие вопросы по тегам:

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