Как использовать команду 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'
В чем же суть? Давайте подробнее рассмотрим.
-
Опция -E: Флаг
-E
позволяет интерпретировать регулярные выражения как расширенные. Это делает использование регулярных выражений более гибким и мощным. Как указано в документации (man find
), использование-E
активирует новые возможности для поиска. -
Полный путь: Также важно заметить, что для успешного поиска необходимо использовать полное название файла, включая путь. В случае
find
регулярное выражение должно начинаться с.*
, чтобы учесть весь путь до файла. - Структура регулярного выражения: Регулярное выражение
'.*/Report2400\.clip[0-9]+\.mp3'
корректно соответствует всем запрашиваемым файлам, поскольку оно включает и номер клипа.
Заключение
Переходя с одной системы на другую, полезно быть внимательным к особенностям команд и их параметров. Правильная настройка команды find
с использованием расширенных регулярных выражений на macOS может помочь избежать множества проблем и сделать поиск файлов более эффективным. Если вы когда-либо столкнулись с аналогичной ситуацией, просто помните о флаге -E
и убедитесь, что используете полный путь к файлам.