Поиск, выбор и преобразование без открытия каждого файла
Именно на поиске терминал перестаёт быть просто быстрым файловым менеджером и становится способом рассуждать о проекте. Главное здесь не хитрый запрос, а умение уменьшать широкий вопрос до такого набора результатов, которому уже можно доверять.
Поиск — это вопрос, который вы задаёте проекту
В графическом файловом менеджере мы часто сначала ходим по папкам, а потом решаем, что именно ищем. Команда поиска переворачивает порядок: вы описываете признак — имя, текст, тип или начальную папку — и дерево само показывает подходящие места.
Это особенно полезно в чужом или давно забытом проекте. Необязательно заранее знать, где лежит каждая настройка: задавайте всё более узкие вопросы и собирайте карту из фактов.
Подготовьте маленькое пространство, которое не жалко менять
Создайте project/search/notes.txt, вставьте в него заготовку ниже и сделайте копию. Во второй копии мы намеренно заменим alpha на beta, чтобы рядом были похожие файлы с одним заметным различием.
Учиться поиску и замене проще на данных, правильный ответ для которых вы знаете заранее. Сначала убедитесь, что команда находит именно ожидаемое, и только после этого переносите приём на настоящий проект.
project=alpha
status=draft
owner=Max
note=rename images before release
install md code copy find replace stat attrcd lil-playgroundmd project/searchcode project/search/notes.txt -ncopy project/search/notes.txt project/search/notes-2.txtreplace alpha beta project/search/notes-2.txt -wИмя файла и текст внутри — разные измерения
Если результатов слишком много, не усложняйте запрос автоматически. Сначала определите, что именно слишком широко: стартовая папка, тип объекта, расширение, регистр или вообще вы искали содержимое вместо имени.
find notes -f -p project/searchfind draft -t -p project/searchfind owner -t -e txt -p project/searchСначала сузьте область, и только потом ищите широко
Рекурсивный поиск по огромному проекту иногда нужен, но редко должен быть первым движением. Начните с самой маленькой папки, где может находиться ответ, определите файлы это или каталоги и явно включайте чувствительность к регистру только когда она важна.
Этот принцип шире одной команды
find project -F -p .find status -t -h -p project/searchfind Max -t -c -p project/searchМассовая замена должна сначала быть отчётом
Последовательность «предпросмотр → проверка → запись → повторный поиск» гораздо надёжнее, чем «заменить и надеяться». Так потенциально опасная массовая операция становится наблюдаемой процедурой.
replace draft reviewed project/search -r -e txtreplace draft reviewed project/search -r -e txt -w -bfind reviewed -t -p project/searchСодержимое — не единственное свидетельство о файле
Полезно воспринимать метаданные как ещё один фильтр.
stat project/search/notes.txtattr project/search/notes.txt sizeattr 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