Как найти файл по имени в Linux через команду find?
Где-то в проекте лежит файл config.json, но я не помню, в какой папке. Как найти файл по имени через терминал во всех подпапках сразу? Команда find выдаёт что-то непонятное.
2 ответа
Для поиска файлов по имени есть команда find. Её формат: find ГДЕ-искать УСЛОВИЕ.
Найти файл по точному имени во всех подпапках текущей директории:
find . -name config.json
Точка . означает «искать здесь и во всех вложенных папках».
Поиск по шаблону (звёздочка = любые символы) — имя бери в кавычки:
find . -name "*.json"
найдёт все файлы с расширением .json.
Если регистр букв не важен, используй -iname (i = ignore case):
find . -iname "config*"
Найти только папки с таким именем:
find . -type d -name node_modules
(-type d = directories, -type f = только файлы).
Искать по всей системе можно от корня /, но это медленно и завалит экран ошибками «Permission denied».
Частая ошибка: забыть кавычки вокруг шаблона со звёздочкой. Без кавычек find . -name *.json — звёздочку сначала раскроет сам bash (подставит имена из текущей папки), и find отработает не так, как ты ждёшь. Шаблоны с * всегда заключай в кавычки: "*.json".
Если нужно искать по содержимому (текст внутри файлов), а не по имени — это уже не find, а grep. Не путай:
find— ищет файлы (по имени, размеру, дате).grep— ищет текст внутри файлов.
Ещё быстрый вариант для имён файлов — locate config.json (если установлен). Он ищет по индексу и работает мгновенно, но может не видеть только что созданные файлы (индекс обновляется не сразу).