Найти тему

Команда find и аналоги в терминалах Linux, Windows и MacOS

Оглавление

Команда 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 - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам.