Как найти имена файлов, используя только grep .html ИЛИ .php?

Вопрос или проблема

Это работает нормально:

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" \)

Разбор команды:

  1. find — основная команда для поиска.
  2. . — указывает, что поиск будет производиться в текущем каталоге и его подкаталогах.
  3. -type f — указывает, что необходимо искать только файлы, игнорируя директории.
  4. -name "*dan*" — фильтрует файлы, имена которых содержат строку "dan". Звездочка * обозначает любое количество символов перед и после.
  5. \( -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-подобных системах.

Оцените материал
Добавить комментарий

Капча загружается...