#!/usr/bin/env bash
function esc_double_quotes() {
echo $* | sed 's|"|\\\\"|g'
}
Другой вариант использования 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)
Я бы сделал:
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
.