Использование find с командой sh не работает - дополнительные запросы

Использование find с командой sh не работает - дополнительные запросы

В дополнение к ранее опубликованному запросу Использование find с sh - команда не работает

find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls

Эта команда не смогла найти файлы, когда текст "archive" или "chmod" находится в нескольких строках. Однако она может сканировать файлы, когда текст "chmod" и "archive" находится в одной строке.

Поэтому попробовал эту команду, но она не дала желаемого результата.

1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +

Почему эта команда не дает желаемого результата?

Попробовал эту команду, она дает ожидаемый результат, но периодически выдает ошибку «find: 'pcregrep' terminated by signal 11'»

2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls

Почему возникает ошибка?

решение1

Ваша вторая команда в вопросе не дает вам правильный вывод, потому что порядок тестов, которые вы используете, findважен. Команда выведет результаты только для файлов, содержащих chmodстроку, потому что другая grepкоманда запущенапосле -ls(и не производит вывод).

Вам нужно найти файлы, содержащие как строки, так chmodи archive.

find . -type f -name '*FW*' \
    -exec grep -Fiq chmod {} \; \
    -exec grep -Fiq archive {} \; -ls

Это вызывает grep -Fiq chmodвсе файлы, FWв имени которых есть , а затем grep -Fiq archiveте, в которых первый файл grepнашел совпадение. Если второй файл grepтакже что-то нашел, то -lsвступает в силу.

Связанный контент