Как воспользоваться поиском в macOS с помощью регулярных выражений?

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

При переходе с одной операционной системы на другую, многие пользователи сталкиваются с проблемами, связанными с совместимостью команд. В данной статье мы рассмотрим, как правильно использовать команду find на macOS для поиска файлов с помощью регулярных выражений, особенно если вы делали это на Ubuntu Linux.

Проблема с командой find

Недавно я столкнулся с проблемой при попытке перенести сценарий из системы 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'

Я ожидал получить все восемь файлов, но результат не содержал ни одного соответствия. Это привело меня к раздумьям о том, что же я сделал не так.

Почему команда не сработала

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

Решение проблемы

Как показали дальнейшие исследования, правильная команда должна выглядеть следующим образом:

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

В чем же суть? Давайте подробнее рассмотрим.

  1. Опция -E: Флаг -E позволяет интерпретировать регулярные выражения как расширенные. Это делает использование регулярных выражений более гибким и мощным. Как указано в документации (man find), использование -E активирует новые возможности для поиска.

  2. Полный путь: Также важно заметить, что для успешного поиска необходимо использовать полное название файла, включая путь. В случае find регулярное выражение должно начинаться с .*, чтобы учесть весь путь до файла.

  3. Структура регулярного выражения: Регулярное выражение '.*/Report2400\.clip[0-9]+\.mp3' корректно соответствует всем запрашиваемым файлам, поскольку оно включает и номер клипа.

Заключение

Переходя с одной системы на другую, полезно быть внимательным к особенностям команд и их параметров. Правильная настройка команды find с использованием расширенных регулярных выражений на macOS может помочь избежать множества проблем и сделать поиск файлов более эффективным. Если вы когда-либо столкнулись с аналогичной ситуацией, просто помните о флаге -E и убедитесь, что используете полный путь к файлам.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *