Введение

Часть 5

Поиск, выбор и преобразование без открытия каждого файла

Именно на поиске терминал перестаёт быть просто быстрым файловым менеджером и становится способом рассуждать о проекте. Главное здесь не хитрый запрос, а умение уменьшать широкий вопрос до такого набора результатов, которому уже можно доверять.

Поиск — это вопрос, который вы задаёте проекту

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

Это особенно полезно в чужом или давно забытом проекте. Необязательно заранее знать, где лежит каждая настройка: задавайте всё более узкие вопросы и собирайте карту из фактов.

Подготовьте маленькое пространство, которое не жалко менять

Создайте project/search/notes.txt, вставьте в него заготовку ниже и сделайте копию. Во второй копии мы намеренно заменим alpha на beta, чтобы рядом были похожие файлы с одним заметным различием.

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

Начните файл с этого
project=alpha
status=draft
owner=Max
note=rename images before release
install md code copy find replace stat attr
cd lil-playground
md project/search
code project/search/notes.txt -n
copy project/search/notes.txt project/search/notes-2.txt
replace alpha beta project/search/notes-2.txt -w

Имя файла и текст внутри — разные измерения

find notes -f ищет по именам файлов. find draft -t ищет текст внутри. Это разные вопросы; флаги -t, -e и -p позволяют одновременно описать и содержимое, и границы поиска.

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

find notes -f -p project/search
find draft -t -p project/search
find owner -t -e txt -p project/search

Сначала сузьте область, и только потом ищите широко

Рекурсивный поиск по огромному проекту иногда нужен, но редко должен быть первым движением. Начните с самой маленькой папки, где может находиться ответ, определите файлы это или каталоги и явно включайте чувствительность к регистру только когда она важна.

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

find project -F -p .
find status -t -h -p project/search
find Max -t -c -p project/search

Массовая замена должна сначала быть отчётом

replace по умолчанию ничего не записывает, а показывает, что изменилось бы. Это не лишний шаг, а правильная модель безопасности: вы видите файлы и совпадения до первой записи. Только после проверки добавляйте -w; -b создаст резервные копии.

Последовательность «предпросмотр проверка запись повторный поиск» гораздо надёжнее, чем «заменить и надеяться». Так потенциально опасная массовая операция становится наблюдаемой процедурой.

replace draft reviewed project/search -r -e txt
replace draft reviewed project/search -r -e txt -w -b
find reviewed -t -p project/search

Содержимое — не единственное свидетельство о файле

stat и attr отвечают на вопросы, которых нет в текстовом поиске: размер, MIME-тип, размеры изображения, время, права доступа и другие метаданные. Иногда правильный файл быстрее узнаётся не по тексту внутри, а по тому, что это за объект.

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

stat project/search/notes.txt
attr project/search/notes.txt size
attr project/search/notes.txt mime

Проверенное преобразование — уже маленькая технология

Когда у вас получилась безопасная последовательность — найти draft, увидеть будущую замену, записать изменения с резервной копией и убедиться, что появился reviewed — сохраните её в .lil. Это уже не набор случайных команд, а повторяемый метод.

Так и появляется ценность личной библиотеки сценариев. Важная единица знания — не «я помню команду», а «у меня есть процедура, предпосылки и проверки которой я понимаю».

Сохраните это как сценарий

Сохраните блок как review-status.lil после того, как проверили предварительный просмотр в своей тренировочной папке. Он находит старое значение, показывает будущую замену, записывает её с резервными копиями, подтверждает новое значение и проверяет один характерный файл.

#lil
@install find replace stat attr
cd lil-playground
find draft -t -p project/search
replace draft reviewed project/search -r -e txt
replace draft reviewed project/search -r -e txt -w -b
find reviewed -t -p project/search
stat project/search/notes.txt