Перенаправить результаты grep в find

#!/usr/bin/env bash

function esc_double_quotes() {
    echo $* | sed 's|"|\\\\"|g'
}
1
15.11.2016, 15:51
2 ответа

Другой вариант использования find + grep

find /home/myname/workfolders/ \
     -name '*pdf' -type f -exec grep -qFf \
          <(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)'\
                 /home/myname/log/myspecificlogfile.log) \
     -print

Или вы можете разделить его на две команды вертикальной чертой

find /home/myname/workfolders/ -name '*pdf' -type f |
grep -qFf <(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)' \
            /home/myname/log/myspecificlogfile.log)
0
27.01.2020, 23:34

Я бы сделал:

grep -oP '(?<=Some problem with file named ).*pdf(?=\.)' \
  /home/myname/log/myspecificlogfile.log | awk -F / '
     ARGIND == 1 {files[$0]; next}
     $NF in files' - RS='\0' <(
     find /home/myname/workfolders/ -name '*pdf' -type f -print0)

(предполагает реализацию GNU grep и awk и оболочку с поддержкой подстановки процессов, например ksh , zsh или bash ).

Использование find -имя не идеально для имен файлов *. Pdf или ?. pdf , например. Запуск одного find для каждого имени файла был бы неэффективным. Даже если вы сделали решение, которое вызывает один find с -name a.pdf -o -name b.pdf ... , это, вероятно, все равно будет менее эффективным, чем поиск по хешу, поскольку сделано awk .

2
27.01.2020, 23:34

Теги

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