Захват файлов журнала, которые закончились с любым числом

dos2unix также удаляет спецификации и преобразует UTF-16 в UTF-8:

$ printf %s あ|recode ..utf16 >a;xxd -p a;dos2unix a;xxd -p a
feff3042
dos2unix: converting file a to Unix format...
e38182

dos2unix также удаляет спецификации UTF-8:

$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61
-1
29.08.2018, 13:42
4 ответа

-regex( расширение GNU, также распознаваемое некоторыми другими findреализациями в настоящее время, но с существенными отличиями )похоже на -path, за исключением того, что оно использует регулярные выражения вместо подстановочных знаков. Он соответствует всему пути к файлу, а не только его имени.

Таким образом,.*\.log.*[0-9](нет необходимости в ^или $, между прочим, они неявно с find-regex)будут соответствовать ./dir/foo.log-3, но также и ./foo.logic/file.bz2, где .*захвачен ic/file.bz.

-nameсоответствует только имени файла , использует подстановочные знаки, но не имеет аналога регулярного выражения. Здесь для файлов, имя которых содержит .logи заканчивается цифрой, вам все равно не нужны регулярные выражения, -name '*.foo*[0-9]'.

Вы можете сделать то же самое с регулярными выражениями, но с -regex '.*\.log[^/]*[0-9]', чтобы убедиться, что часть между .logи последней цифрой не содержит /, поэтому она совпадает только по имени файла.

С помощью -regexвы можете пойти дальше в определении шаблонов, особенно если вы включите расширенные регулярные выражения, используя -Eс некоторыми BSD findили -regextype posix-extendedс GNU find.

find. -regextype posix-extended -regex '.*\.log([.-][0-9]+)+' # GNU
find -E. -regex '.*\.log([.-][0-9]+)+' # BSD

Здесь сопоставление на .log, за которым следует один или несколько .<number>или -<number>.

Без -regextype posix-extendedGNU findрегулярные выражения являются регулярными выражениями emacs , своего рода гибридом между стандартными базовыми регулярными выражениями и стандартными расширенными регулярными выражениями (поддерживает +, но группировка с \(...\)вместо (...)).

Без -EBSD findрегулярные выражения являются стандартными базовыми регулярными выражениями.

1
28.01.2020, 05:10

Попробуйте,

find.  -type f   -regex  ".*\.log\..*[0-9]$"
./server.log.2018-01-23-12
./server.log.2018-07-07-06
./log-cleaner.log.2
./log-cleaner.log.10
./server.log.232.434
./server.log.2018-01-23-11
./server.log.2017-10-31-03
./controller.log.2018-01-03-01
./server.log.2018-04-06-17
./log-cleaner.log.1
./controller.log.2018-01-03-03
./server.log.2018-04-06-18
./controller.log.2018-01-03-02
./server.log.2018-07-07-05
./server.log.2017-10-31-04
  • нам нужно выбраться из.
0
28.01.2020, 05:10

Если после «log» есть только цифры, .и -, может работать следующее

find.  -type f   -regex  ".*[.]log[-.0-9]*$" 
0
28.01.2020, 05:10

Вы можете искать свои файлы, используя следующий способ, не прибегая кnon-GNUfind:

find. -type f \
    \( -name '?*.log.[0-9]' -o \
       \( \
           -name '?*.log.[0-9]*[0-9]'  \
         ! -name '?*.log.?*[!0-9.-]*?' \
         ! -name '?*.log.?*[.-][.-]*?' \
       \) \
    \) \
    -print;

Это выполняет многоуровневую -многоуровневую фильтрацию имен файлов, перехваченных им, и постепенно уменьшает улов и обнуляет требуемое. Если быть точным:

  • Сразу выберите любой файл, чей basename, т. е. без пути, заканчивается на.log.single_digit
  • OTW, выберите те, которые заканчиваются на.log.NUManythingNUMЭто установит тенденцию для имен файлов, которые будут пойманы в сети.
  • Из приведенного выше улова отклоните те, у которых есть non number, non dash, or non dotв части anythingимени файла. Обратите внимание, что тенденция начала и окончания цифры должна соблюдаться.
  • Теперь у нашего улова есть все те файлы, в которых часть anythingсостоит только из digit(s), dot(s)и dash(s). Последнее ограничение состоит в том, что dotили dashне должны иметь непосредственных соседей как слева, так и справа.
  • П.С. Обратите внимание, что опция -nameрассматривает только базовую часть имени файла, И
  • Часть
  • -nameработает на основе wildcardи, следовательно, они неявно привязаны, что означает, что совпадающее имя является полным.
0
28.01.2020, 05:10

Теги

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