У меня есть команда find, чтобы получить все файлы, измененные за последние 50 секунд, которые соответствуют следующему регулярному выражению hell\d
в последних 1000 символах. Я использую хвост, чтобы получить последние 1000 символов, чтобы ускорить поиск, потому что файлы для проверки огромны (в среднем 3gb).Как объединить две команды в -exec параметр find?
find /home/ouhma -newermt '50 seconds' -type f |
while read fic; do
if tail -c 1000 "${fic}" | LANG=C LC_ALL=C grep -Pq 'hell\d'; then
echo "${fic}"
fi
done
Это Возможное использование -exec
параметра, чтобы заменить эту уродливую петлю и получить результат еще быстрее?
Это работает, но я не знаю, если его лучший способ сделать это:
find /home/ouhma -newermt '50 seconds' -type f -exec bash -c 'LANG=C LC_ALL=C grep -Pq "hell\d" <(tail -c 1000 "{}") && echo "{}"' \;
Если я проверить свою команду, таким образом: 'найти /home/ouhma/hello.txt -exec LC_ALL = C Grep -Pq 'ад \ д' <(хвост -c 1000 {}) \; -exec echo {} \; ' Возвращает следующую ошибку: ' tail: невозможно открыть '{}' для чтения: Нет такого файла или каталога find: 'LC_ALL = C': Нет такого файла или каталога' – harrison4
@ ouhma Проверьте мои правки. – heemayl
Истечение 'bash' для каждого файла не будет быстрее, чем собственная попытка OP. – anubhava