Как использовать функцию поиска в macOS с шаблоном регулярного выражения?

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

Я пытаюсь перенести скрипт с Ubuntu Linux на ноутбук macOS и мне трудно правильно настроить find с использованием регулярного выражения.

В каталоге у меня есть следующие файлы.

/Users/kevin/Documents/Audio/arn/2400/Report2400.clip.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip1.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip2.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip3.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip4.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip5.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip6.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip7.mp3
/Users/kevin/Documents/Audio/arn/2400/Report2400.clip8.mp3

запуск этой команды:

find . -regex 'Report2400\.clip[0-9]+\.mp3'

Я ожидаю получить 8 файлов, 8 с числом после “clip”, но ничего не возвращается.

Что я упускаю? Я знаю, что это элементарно, но я уже близок к тому, чтобы обратиться в психиатрическую больницу.

Я считаю, что это должно сработать:

find -E . -regex '.*/Report2400\.clip[0-9]+\.mp3'

Согласно man find, вы используете -E для получения расширенных регулярных выражений:

 -E      Интерпретировать регулярные выражения, следующие за -regex и -iregex
         как расширенные (современные) регулярные выражения, а не базовые
         регулярные выражения (BRE's). Страница руководства re_format(7) полностью
         описывает оба формата.

Также, согласно man find, вам нужно .*/, чтобы включить весь путь:

 -regex pattern
         Истинно, если весь путь к файлу соответствует шаблону, используя регулярное
         выражение. Чтобы соответствовать файлу с именем ``./foo/xyzzy'', вы можете использовать
         регулярное выражение ``.*/[xyz]*'' или ``.*/foo/.*'', но не
         ``xyzzy'' или ``/foo/''.

Ответ или решение

Конечно, вот подробное техническое объяснение для решения задачи с использованием команды find в macOS с использованием регулярных выражений (regex).

Как использовать find и регулярные выражения на macOS

Если вы переноcите скрипт из Ubuntu на macOS, необходимо учитывать, что реализация команды find в macOS немного отличается от большинства дистрибутивов Linux. В macOS GNU-утилиты заменены на версии BSD, что вносит некоторые нюансы в работу, особенно при использовании регулярных выражений.

Шаги для корректного поиска файлов

  1. Используйте расширенные регулярные выражения: В macOS необходимо использовать флаг -E для активации расширенных регулярных выражений. Это аналогично использованию egrep в Linux.

  2. Учитывайте полный путь: По умолчанию команда find в macOS использует путь от корня текущего каталога. Это означает, что регулярное выражение должно соответствовать всему пути к файлу.

  3. Корректный формат команды: Для поиска файлов, которые соответствуют шаблону Report2400.clip[0-9]+.mp3, используйте следующий формат команды:

    find -E . -regex '.*/Report2400\.clip[0-9]+\.mp3'
    • ./: Это позволяет функцииfind` искать в полном пути начиная от текущего каталога.
    • Флаг -E: Этот флаг переводит find в режим использования расширенных регулярных выражений.

Почему важно использование -E и '.*/'?

  • Расширенные регулярные выражения: Без -E, регулярные выражения будут интерпретироваться как базовые, что ограничивает их функциональность.
  • Полный путь: Регулярное выражение должно соответствовать не только имени файла, но и пути к нему. Предварительная часть выражения '.*/' позволяет правильно интерпретировать путь и находить файлы независимо от их вложенности.

SEO Оптимизация для профессиональной аудитории

  • Ключевые слова: Используйте термины вроде "регулярные выражения macOS", "find macOS", и "расширенные регулярные выражения" для усиления видимости в поисковых системах.
  • Проблема и решение: Четко обозначьте проблему и предложите конкретное решение, как это описано выше.
  • Локализация: Пишите на русском языке с использованием профессиональной лексики, чтобы соответствовать ожиданиям и предпочтениям целевой аудитории.

Надеюсь, это разъяснение поможет вам успешно перенести ваш скрипт на macOS и эффективно использовать регулярные выражения в команде find.

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

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