Рейтинг:0

Удалить сегодняшнюю строку даты из всех имен файлов в папке

флаг cn
Pad

У меня есть папка, полная jpeg, отформатированных следующим образом:

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

я пытался использовать этот ответ чтобы написать регулярное выражение для удаления 8 цифр, используя этот код:

переименовать - 's/^_\d{8}\_//' *

Но это ничего не дало. Я не уверен, как правильно отформатировать это, чтобы удалить строку средней даты.

Рейтинг:3
флаг hr

Чтобы удалить первое подчеркивание и следующие 8 цифр с помощью Perl-базированного переименовать (иначе переименовать файл), вам нужно отбросить якорь начала строки ^, и второе подчеркивание (иначе вы получите 0001XYZ.jpg и т.д.)

Так:

переименовать -n 's/_\d{8}//' *_*_*.jpg

В качестве альтернативы вы можете использовать ммв (из одноименного пакета Ubuntu):

mmv -n '*_*_*.jpg' '#1_#3.jpg'

В любом случае, предназначен для тестирования - удалите его, когда вас устроят предложенные изменения.

Если вы застряли с версией переименования из утилита-линукс (который устанавливается как переименовать.ul в моей системе), то, вероятно, лучшее, что вы сможете сделать, это сопоставить литеральную строку _20210516:

rename.ul -vn _20210516 '' *_*_*.jpg

Если вам действительно нужно удалить сегодняшний Дата, которую вы могли бы обобщить, чтобы

rename.ul -vn "_$(дата +%Y%m%d)" '' *_*_*.jpg

(Обратите внимание, что переименовать.ul из util-linux 2.34 делает поддерживать вариант, который я использую здесь в демонстрационных целях — отрегулируйте соответствующим образом, если ваша версия этого не делает).

Pad avatar
флаг cn
Pad
Это дает мне ошибку `переименовать: недопустимая опция -- 'n' Применение: переименовать файл замены выражения [options]... Параметры: -v, --verbose объяснить, что делается -s, --symlink действуют на цель символической ссылки -h, --help показать эту справку и выйти -V, --version вывести информацию о версии и выйти Для получения более подробной информации см. rename(1). ` и когда я запускаю его без -n, мои имена файлов не меняются :(
флаг hr
@Pad, в этом случае реализация `rename`, которую вы используете, не та, с которой я знаком - мой ответ относится к основанной на Perl реализации, иногда известной как `file-rename`.
Pad avatar
флаг cn
Pad
Нет проблем, когда я делаю -V, я получаю `rename from util-linux 2.23.2`, спасибо за вашу помощь! Я буду продолжать пытаться.
флаг hr
@Pad Я добавил пару других вариантов, которые могут подойти вам лучше
флаг cn
Также известен как [`prename`](https://manpages.ubuntu.com/manpages/focal/en/man1/prename.1p.html)
Pad avatar
флаг cn
Pad
@steeldriver спасибо - это сработало отлично `rename -v "_$(date +%Y%m%d)" '' *_*_*.jpg `

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.