У меня есть папка, полная jpegs, отформатированных так:
0001_20210516_XYZ.jpg
0002_20210516_XYZ.jpg
123_20210516_XYZ.jpg
01_20210516_XYZ.jpg
и я хочу переименовать все файлы так, чтобы строка даты в середине была удалена, чтобы файлы выглядели так:
0001_XYZ.jpg
0002_XYZ.jpg
123_XYZ.jpg
01_XYZ.jpg
Я пытался использовать этот ответ, чтобы написать regex для удаления 8 цифр, используя этот код:
rename - 's/^_\d{8}\_//' *
Но это ничего не дало. Я не уверен, как правильно отформатировать это, чтобы средняя строка даты была удалена.
Чтобы удалить первое подчеркивание и следующие 8 цифр, используя rename
(он же file-rename
), основанный на Perl, вам нужно убрать якорь начала строки ^
и второе подчеркивание (иначе вы получите 0001XYZ. jpg
и т.д.)
Итак:
rename -n 's/_\d{8}//' *_*_*.jpg
В качестве альтернативы вы можете использовать mmv
(из одноименного пакета Ubuntu):
mmv -n '*_*_*.jpg' '#1_#3.jpg'
В любом случае, -n
предназначен для тестирования - удалите его, когда будете довольны предложенными изменениями.
Если вы застряли с версией rename из util-linux
(которая установлена как rename.ul
в моей системе), то, вероятно, лучшее, что вы сможете сделать, это подобрать литеральную строку _20210516
:
rename.ul -vn _20210516 '' *_*_*.jpg
Если вам действительно нужно удалить сегодняшнюю дату, вы можете обобщить это до
rename.ul -vn "_$(date +%Y%m%d)" '' *_*_*.jpg
(Обратите внимание, что rename. ul из util-linux 2.34
поддерживает опцию -n
, которую я использую здесь в демонстрационных целях - настройте соответствующим образом, если в вашей версии ее нет).