Команда find — это инструмент для поиска файлов и директорий в файловой системе на основе различных критериев, таких как имя файла, размер, время последнего изменения, права доступа и другие атрибуты.
Не путать с командой grep, которая используется для поиска строк. Про команду grep рекомендую почитать в статье "Команды grep, egrep и аналоги в терминалах Linux, Windows и MacOS".
В зависимости от оболочки и операционной системы, команда find может немного отличаться, хотя её основные принципы остаются схожими. В этом обзоре мы рассмотрим особенности использования команды find в Linux, MacOS, Git Bash, Windows CMD и PowerShell.
1. Linux Terminal
В Linux команда find является одной из стандартных утилит, и её функционал довольно обширен.
Основной синтаксис:
find [начальный_каталог] [параметры] [действия]
Примеры использования:
- Поиск по имени:
find /home/user -name "*.txt"
Найти все файлы с расширением .txt в каталоге /home/user и его подкаталогах.
- Поиск по размеру:
find / -size +100M
Найти все файлы размером более 100 мегабайт на всем диске.
- Поиск по времени изменения:
find /var/log -mtime -7
Найти все файлы в каталоге /var/log, которые были изменены за последние 7 дней.
- Поиск с выполнением команды:
find /tmp -name "*.log" -exec rm {} \;
Найти все файлы с расширением .log в каталоге /tmp и удалить их.
- Поиск по типу файла:
find /home/user -type d
Найти все директории в каталоге /home/user.
Полезные флаги:
- -name — поиск по имени (можно использовать шаблоны, например, *.txt).
- -size — поиск по размеру файла (+ больше, - меньше, c байты, k килобайты, M мегабайты и т.д.).
- -mtime — поиск по времени изменения (в днях).
- -type — поиск по типу файла (например, f для файла, d для директории).
- -exec — выполнение команды с найденными файлами.
2. MacOS Terminal
Команда find в MacOS практически идентична по синтаксису и возможностям с Linux, поскольку MacOS базируется на Unix-подобной системе.
Примеры использования:
- Поиск по имени с шаблоном:
find /Users/username -name "*.pdf"
Найти все PDF-файлы в домашней директории пользователя.
- Поиск и удаление файлов:
find /Users/username/Downloads -name "*.dmg" -exec rm {} \;
Поиск и удаление всех .dmg файлов в папке загрузок.
- Поиск файлов, измененных за последние 24 часа:
find /Users/username/Documents -mtime -1
Отличия от Linux:
В MacOS отсутствует значительная разница в работе команды find, за исключением некоторых флагов и поведения с правами доступа. В остальном команда работает аналогично.
3. Git Bash (Windows)
Git Bash предоставляет командную строку с поддержкой большинства утилит и команд из Linux/Unix, включая find. Однако, поскольку Git Bash работает на Windows, есть некоторые особенности.
Примеры использования:
- Поиск файлов по имени:
find /c/Users/username/Documents -name "*.txt"
В Git Bash пути к файлам и директориям используют Unix-стиль (например, /c/ вместо C:\).
- Поиск по размеру:
find /c/ -size +500k
Найти файлы размером больше 500 килобайт на диске C:.
Особенности:
- Пути используют Unix-стиль (например, /c/Users/username/... вместо Windows-путей).
- Некоторые функции могут работать медленнее из-за эмуляции Unix-команд через Windows.
4. Windows CMD
В стандартной командной строке Windows (cmd.exe) команда find работает совершенно по-другому и используется для поиска текста в файлах, а не для поиска файлов по файловой системе.
Пример использования команды find в Windows CMD:
find /I "search_term" file.txt
Этот пример ищет строку "search_term" в файле file.txt.
Параметр /I - Поиск без учета регистра символов.
Для поиска файлов в Windows CMD используется команда dir с параметрами:
dir /s /p *.txt
то команда для поиска всех .txt файлов в текущем каталоге и его подкаталогах.
Основные флаги dir:
- /s: рекурсивный поиск по подкаталогам.
- /p: постраничный вывод результатов.
5. Windows PowerShell
PowerShell предоставляет гораздо более мощные инструменты для работы с файлами и папками по сравнению с CMD. В PowerShell команда Get-ChildItem используется для поиска файлов и директорий, что является аналогом команды find.
Примеры использования:
- Поиск по имени:
Get-ChildItem -Path C:\Users\username\Documents -Filter "*.txt" -Recurse
Найти все .txt файлы в папке Documents рекурсивно.
- Поиск по дате изменения:
Get-ChildItem -Path C:\Users\username\Documents -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) }
Найти все файлы, измененные за последние 7 дней.
- Удаление файлов, соответствующих критериям:
Get-ChildItem -Path C:\Temp -Filter "*.log" -Recurse | Remove-Item
Найти и удалить все .log файлы в папке Temp.
Полезные флаги:
- -Recurse: рекурсивный поиск по подкаталогам.
- -Filter: фильтрация файлов по имени или шаблону.
- -Path: путь к директории.
Заключение
Команда find и её аналоги присутствуют во всех основных терминалах и оболочках, хотя их реализация и синтаксис могут несколько отличаться в зависимости от операционной системы:
- Linux и MacOS: команда find почти идентична, с мощной поддержкой различных флагов для фильтрации файлов и выполнения команд.
- Git Bash: предоставляет интерпретацию Unix-команд на Windows, включая find, хотя могут возникать некоторые ограничения по производительности.
- Windows CMD: не поддерживает команду find в привычном Unix-смысле, вместо этого используется dir для поиска файлов.
- PowerShell: использует командлеты вроде Get-ChildItem и работает с объектами, что делает его очень гибким и мощным для поиска и управления файлами.
Каждая оболочка имеет свои особенности, но общие принципы поиска файлов и папок остаются схожими.
Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам.