Перейти к содержимому
TelegramGitHub

Поиск файлов: шаблоны и find

Данные часто лежат во многих файлах: по одному на день или месяц. Шаблоны помогают работать со всеми файлами сразу. find помогает найти файл, если вы не помните, где он.

Shell сам превращает шаблон в список подходящих имён. Это происходит до запуска команды.

ШаблонЧто подходитПример
*Любые символы, сколько угодноsales_*.csv — все файлы продаж
?Ровно один любой символsales_2024-0?.csv — месяцы с 01 по 09
[ ]Один символ из спискаsales_2024-0[12].csv — январь и февраль
Окно терминала
ls data/*.csv # все CSV в папке data
wc -l data/sales_*.csv # строки во всех файлах продаж
cp data/sales_*.csv /tmp/ # скопировать все файлы продаж

Шаблон * не находит скрытые файлы. ls inbox/* не покажет inbox/.env.

find ищет по всему дереву папок:

Окно терминала
find . -name "*.log" # все .log в текущей папке и ниже
find ~ -name "profiles.yml" # где лежит конфиг dbt
find . -type d # только папки
find . -type f -size +100k # файлы больше 100 КБ
find . -empty # пустые файлы и папки
  • Первый аргумент — где искать. . — текущая папка.
  • Шаблон в -name пишите в кавычках. Иначе shell раскроет * раньше, чем find его увидит.
Окно терминала
du -sh data # размер папки data
du -sh * # размер каждой папки и файла здесь

Так ищут, что заняло весь диск на сервере.

Все задания — в папке ~/cli-practice.

Выведите список только файлов продаж из папки data одним шаблоном.

Проверка:

data/sales_2024-01.csv
data/sales_2024-02.csv
data/sales_2024-03.csv
Решение
Окно терминала
ls data/sales_*.csv

Выведите только файлы продаж за январь и февраль. Используйте [ ].

Проверка: два файла, sales_2024-01.csv и sales_2024-02.csv.

Решение
Окно терминала
ls data/sales_2024-0[12].csv

Найдите все файлы логов (.log) во всех папках.

Проверка: три файла. Порядок может быть другим.

./logs/pipeline.log
./logs/archive/pipeline_2024-01.log
./logs/archive/pipeline_2024-02.log
Решение
Окно терминала
find . -name "*.log"

Сколько всего CSV-файлов в cli-practice, во всех папках? Передайте вывод find в wc -l.

Проверка: 8.

Решение
Окно терминала
find . -name "*.csv" | wc -l

Найдите файлы больше 100 КБ. Потом найдите все пустые файлы и папки.

Проверка: большой файл один — ./data/events.csv. Пустые: три файла tmp_export_0*.bak и папка inbox/old.

Решение
Окно терминала
find . -type f -size +100k
find . -empty

Какая папка в cli-practice занимает больше всего места?

Проверка: data, около 380 КБ. Точные числа зависят от файловой системы.

Решение
Окно терминала
du -sh *

Дальше: grep и конвейеры.