find: регулярное выражение в имени

Измените метод загрузки с USB-накопителя при смене USB-накопителя в качестве загрузочного устройства. Используйте инструмент power iso, чтобы загрузочное USB-устройство работало на 100 % без сбоев...

4
01.04.2020, 20:05
3 ответа

Поиск -nameне использует регулярные выражения (это использовалось в исходной версии вопроса ). Он принимает глобусы оболочки, а это недопустимый глобус оболочки. Вы хотите использовать тест -regex, но также должны указать ему использовать расширенные регулярные выражения или любой другой вариант, который понимает нотации {N}и foo|bar. Наконец, в отличие от -name, тест -regexрассматривает полное имя пути, поэтому вам нужно что-то вроде этого:

$ find. -regextype posix-extended -regex ".*/[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
5678-34-56-bar.csv.gz
1234-12-12-foo.csv.gz

Если вы хотите использовать -name, вы можете сделать:

find. \( \
       -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-foo.csv.gz" \
    -o -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-bar.csv.gz" \
       \) -printf "%f\n"
12
19.03.2021, 02:30

Если у вас есть разумные имена файлов (, по крайней мере, в этой папке )вы можете запустить что-то вроде

 find. | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

Таким образом, вы можете воспользоваться различными опциями grep.

2
19.03.2021, 02:30

Другим вариантом является инструмент fd:

.
fd '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

https://github.com/sharkdp/fd

3
19.03.2021, 02:30

Теги

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