Список (поиск) файлов с повторяющимся шаблоном в их названии

#regex #linux #find #ls

Вопрос:

Мой вопрос так прост, но я пока не мог найти никакого решения. Мне нужно найти файлы с датой (строкой), повторяющейся в их названиях. Например:

20190101_fl_20190101.nc

20190101_fl_20190104.nc
20190102_fl_20190102.nc
20190102_fl_20190104.nc

Мне нужно найти 20190101_fl_20190101.nc и 20190102_fl_20190102.nc.

Я пытался

 ls 20190[0-9][0-9][0-9]_fl_20190[0-9][0-9][0-9].nc  

Но, как и ожидалось, он находит все возможные комбинации.

Любая помощь будет высоко оценена.

Ответ №1:

Вы можете использовать

 find . -type f -regextype posix-extended -regex '.*/(20190[0-9]{3})_fl_1.nc

Регулярное выражение соответствует

  • .*/ - любые символы до крайнего правого / (необходимо, потому что шаблон, используемый с find , требует полного совпадения строк)
  • (20190[0-9]{3}) - Группа 1: 2019 и любые три цифры
  • _fl_ - фиксированная подстрока
  • 1 - обратная ссылка на значение группы 1
  • .nc - .nc струна
  • $ - конец ввода.
Эта -regextype posix-extended опция необходима, так как приведенный выше шаблон совместим с POSIX.


Регулярное выражение соответствует

  • .*/ — любые символы до крайнего правого / (необходимо, потому что шаблон, используемый с find , требует полного совпадения строк)
  • (20190[0-9]{3}) — Группа 1: 2019 и любые три цифры
  • _fl_ — фиксированная подстрока
  • 1 — обратная ссылка на значение группы 1
  • .nc .nc струна
  • $ — конец ввода.

Эта -regextype posix-extended опция необходима, так как приведенный выше шаблон совместим с POSIX.