3

В моей папке я получил такие файлы, как

/data/filename.log /data/filename.log.1 /data/filename.log.2 /data/filenamefilenamefilename.log /data/filenamefilenamefilename.log.2

Я хочу использовать команду "найти" для вывода списка файлов, длина которых превышает 15 символов.

Я пробовал следующее, но ни один из них не работает:

find ./ -type f -iregex "/^.*{15,1000}$/" -print
find ./ -type f -iregex "/^.*{15}$/" -print
find ./ -type f -iregex "^.*{15}$" -print
find ./ -type f -iregex ".*{15}" -print
find ./ -type f -iregex ".{15}" -print
find ./ -type f -iregex ".{15,1000}" -print

Не уверен, что это правильный путь?

Спасибо!

2 ответа2

6

Параметр name принимает простую глобализацию, поэтому будет работать следующее:

 find . -type f -name '????????????????*'

Итак, это 16 вопросительных знаков, за которыми следует звездочка. Знак вопроса соответствует одному символу, но он должен совпадать, поэтому 16 из них подряд гарантируют, что в имени файла содержится 16 символов. Звездочка в конце разрешает любые дополнительные символы, удовлетворяя требованию "больше 15 символов", сопоставляя "16 или более символов".

3

Я бы предложил версию Пола, если вы хотите совпадать только по имени файла. Если вы хотите использовать -regex для сопоставления на полном пути, вы можете сделать, например,

find /data -type f -regextype posix-egrep -regex ".{15}"

или для 15 или более символов

find /data -type f -regextype posix-egrep -regex ".{15}.*"

Проверьте страницу руководства для различных доступных движков регулярных выражений для использования с -regextype .


Вы также можете использовать опцию -regex чтобы искать только имена файлов длиной 15 символов:

find /data -type f -regextype posix-egrep -regex ".*/[^/]{15}"

или 15 или более символов:

find /data -type f -regextype posix-egrep -regex ".*[^/]{15}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .