Найти в Дзене
Герман Геншин

Я раскрыл силу команды find в Linux — теперь нахожу любые файлы за секунды!

Я пользуюсь командой find уже много лет, но по-настоящему понял, как она работает, только недавно. Я заставил себя наконец разобраться с этой вроде бы сложной и непонятной утилитой — и это полностью изменило мой подход к поиску файлов. Команда find — одна из самых необычных программ в Linux. Она настолько важна, что присутствует буквально в каждом дистрибутиве. Но при этом мало кто называет её любимой. Есть более современные альтернативы, например fd, но find — это практически универсальный стандарт, который работает почти везде. В самой простой версии find элементарна: Например, эта команда ищет все файлы с расширением «.txt» в текущей папке и во всех вложенных. Если вы никогда не копались глубже, сложно представить, на что ещё способна find. Её мануал занимает почти 1700 строк (версия 4.9.0)! Стоит немного углубиться — и find превращается уже не в простую утилиту, а фактически в язык программирования. Меня это всегда пугало. Я часто хотел находить только свежие файлы, которые менял
Оглавление

Я пользуюсь командой find уже много лет, но по-настоящему понял, как она работает, только недавно. Я заставил себя наконец разобраться с этой вроде бы сложной и непонятной утилитой — и это полностью изменило мой подход к поиску файлов.

Что такое команда find и в чём её особенность

Команда find — одна из самых необычных программ в Linux. Она настолько важна, что присутствует буквально в каждом дистрибутиве. Но при этом мало кто называет её любимой. Есть более современные альтернативы, например fd, но find — это практически универсальный стандарт, который работает почти везде.

В самой простой версии find элементарна:

Например, эта команда ищет все файлы с расширением «.txt» в текущей папке и во всех вложенных. Если вы никогда не копались глубже, сложно представить, на что ещё способна find. Её мануал занимает почти 1700 строк (версия 4.9.0)! Стоит немного углубиться — и find превращается уже не в простую утилиту, а фактически в язык программирования.

Меня это всегда пугало. Я часто хотел находить только свежие файлы, которые менял сам, но обычные поиски выдавали сплошной бардак: .git-файлы, куча всего вперемешку. В какой-то момент я решил разобраться с find, и, как оказалось, всё не так сложно — а даже увлекательно.

Базовый вызов find выглядит так:

Логика команды такая:

Если запустить find без параметров, она просто покажет абсолютно всё, что есть в текущем каталоге и всех вложенных папках:

-2

Уже это бывает полезно, но вся настоящая мощь find раскрывается, когда вы начинаете использовать разные фильтры и действия.

Как с помощью find за минуты находить свои свежие файлы

Если задача немного сложнее, советую сначала чётко сформулировать, что вы хотите найти, а дальше двигаться по шагам. В моём случае нужно было следующее:

Хорошо бы, чтобы у вас была небольшая тестовая файловая структура для проверки команд. Вот мой пример:

-3

Как найти только свои файлы

Для начала я отбираю только свои файлы через фильтр -user, который выводит всё, что принадлежит вашему пользователю:

USER — это переменная окружения с вашим логином.

Если выполнить такой запрос, среди результатов будут и обычные файлы, и папки:

-4

Чтобы выбрать только файлы и не видеть папки, добавляю тест -type: f — обычный файл, d — директория, l — символическая ссылка и так далее:

Теперь в списке останутся только файлы, которыми владеете вы:

-5

Как исключить файлы, спрятанные в скрытых папках

Следующий шаг — избавиться от файлов, которые лежат в скрытых каталогах. Для этого нужен параметр -prune: он запрещает find «нырять» в такие папки:

Результат может сначала запутать — кажется, будто команда делает что-то не то:

-6

Это связано с тем, как именно срабатывает prune. Вот как это работает:

Вместо вывода пропущенных скрытых папок можно вывести все остальные файлы с помощью оператора -o:

-o означает «ИЛИ»: если папка скрытая, find её пропускает, а для остальных выводит всё, что нужно.

Теперь подключаем фильтр по владельцу и типу файла:

В результате find покажет вам именно те файлы, которые нужны, не захламляя список:

Осталось только отсортировать их по дате изменений и добавить дату к каждому файлу.

Если нужно короче, используйте фильтр -path — результат будет похожим:

Но с -prune быстрее на больших папках: команда даже не заходит в скрытые каталоги, экономя время и ресурсы.

Как красиво отсортировать файлы и вывести дату изменения

Сама find не сортирует список, поэтому здесь на помощь приходит sort — классная утилита для работы с текстом. Но чтобы сортировать, нужно показать дату изменения файла. Для этого выручает -printf: она формирует нужный вывод:

В -printf задаём, что выводить: %TY — год изменения, %Tm — месяц, %Td — день, %p — путь к файлу.

Можете добавить больше информации, если нужно. Мне хватило даты, поэтому просто отправил результат find в sort. Такой формат удобно читать, и главное — теперь сортировать проще, потому что дата стоит первой в строке. Осталось сделать сортировку:

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: