Вопрос или проблема
Это работает нормально:
find . -type f -name "*dan*" | grep '.html'
Но как добавить еще один в grep? С помощью OR
? -o
?
find . -type f -name "*dan*" | grep '.html' or '.php' ???
Это должно работать хорошо в вашем случае с несколькими шаблонами. Вы можете добавить их, добавив обратный слэш:
find . -type f -name "*dan*" | grep '.html\|.php' ???
Нет необходимости передавать в grep
.
find . -type f -name "*dan*" \( -path '*?html*' -o -path '*?php*' \)
Ваш grep '.html'
будет совпадать с html
, предшествующим любым символом (так как .
в регулярных выражениях совпадает с любым символом) где угодно в строке, поэтому я использовал -path '*?html*'
, который делает то же самое для имен файлов, используемых в find
. Возможно, это то, что вы имели в виду, или возможно, вы действительно хотели следующее:
find . -type f -name "*dan*" \( -name '*.html' -o -name '*.php' \)
где -name '*.html'
совпадает с литеральным .html
(точка не является специальной) в конце имени файла.
Ответ или решение
Чтобы найти файлы с именами, которые содержат определенные расширения (например, .html
или .php
), вы можете использовать команду find
с правильными параметрами. Это позволяет эффективно искать нужные файлы без необходимости дополнительного использования grep
, что упрощает процесс.
Использование find
для поиска файлов
Для выполнения задачи, вы можете воспользоваться следующей командой find
, которая ищет файлы с соответствующими расширениями и определенным текстом:
find . -type f -name "*dan*" \( -name "*.html" -o -name "*.php" \)
Разбор команды:
find
— основная команда для поиска..
— указывает, что поиск будет производиться в текущем каталоге и его подкаталогах.-type f
— указывает, что необходимо искать только файлы, игнорируя директории.-name "*dan*"
— фильтрует файлы, имена которых содержат строку "dan". Звездочка*
обозначает любое количество символов перед и после.\( -name "*.html" -o -name "*.php" \)
— эта часть позволяет указать несколько условий для имен файлов.-name "*.html"
— находит файлы, заканчивающиеся на.html
.-o
— логический оператор "ИЛИ", который позволяет указать альтернативный шаблон для поиска.-name "*.php"
— находит файлы, заканчивающиеся на.php
.
Дополнительные рекомендации
Использование регулярных выражений
Если вы предпочитаете использовать регулярные выражения для поиска, вы можете комбинировать find
с grep
. Однако в большинстве случаев, как показано выше, использование только find
является более эффективным и изящным решением.
Пример с grep
:
Если вы все же хотите использовать grep
, это можно сделать следующим образом:
find . -type f -name "*dan*" | grep -E '\.html$|\.php$'
- Здесь
-E
указывает на использование расширенных регулярных выражений, а\.html$
и\.php$
обеспечивают, что в конце имени файла будет именно наше расширение.
Заключение
Использование команды find
с правильными параметрами значительно упрощает процесс поиска файлов с нужными расширениями. Такой подход помогает избежать ненужных сложностей и делает команду более читаемой и понятной. Поэтому старайтесь использовать find
с ключевыми параметрами для достижения наилучших результатов в поиске файлов в Unix-подобных системах.