Как найти файл по имени в Linux
Найти файл notes.txt в домашней папке:
find ~ -name "notes.txt"По части имени и без учёта регистра — по всему диску:
find / -iname "*отчёт*" 2>/dev/nullfind перебирает все папки, начиная с указанной, и печатает пути подходящих файлов. Порядок такой: сначала где искать (~ — домашняя папка, / — весь диск, . — текущая папка), потом условия.
Полезные условия
| Условие | Что ищет |
|---|---|
-name "notes.txt" | точное имя, с учётом регистра |
-iname "notes*" | имя без учёта регистра, * — любые символы |
-type f | только файлы |
-type d | только папки |
-size +100M | больше 100 МБ |
-mtime -7 | изменённые за последние 7 суток |
-maxdepth 2 | не глубже двух уровней вложенности |
Условия складываются: find /var/www -type f -name "*.php" -mtime -1 — PHP-файлы сайта, изменённые за сутки.
Подводные камни
- Шаблон — в кавычках.
find . -name *.txtбез кавычек ломается: оболочка сама подставит имена.txtиз текущей папки, иfindполучит не шаблон, а список файлов — найдёт не то или напишетpaths must precede expression. - Тысячи строк
Permission denied. Обычному пользователю закрыты многие системные папки.2>/dev/nullпрячет эти сообщения; если нужно искать и там — запустите поиск черезsudo. - Долго. Поиск по
/обходит весь диск, включая подключённые сетевые папки. Сузьте место:/etc,/var,/homeвместо/. - Регистр.
-name "Notes.txt"не найдётnotes.txt— для поиска без регистра нужен-iname.
Быстрый поиск по базе
Если искать нужно часто, в Ubuntu и Debian есть пакет plocate: команда plocate notes ищет мгновенно, потому что смотрит не на диск, а в заранее собранный список имён. Список обновляется по расписанию раз в сутки, поэтому только что созданных файлов в нём ещё нет — обновить вручную можно командой sudo updatedb.
Найти программу
Где лежит команда, которая запускается по имени, показывает не find, а which или type:
which python3
type -a python3