Введение

Часть 2

Файлы и каталоги без лишнего риска

Файловый менеджер показывает дерево. Терминал позволяет описывать изменения этого дерева. Самый надёжный ритм прост: посмотреть изменить посмотреть ещё раз.

Думайте деревом, а не окнами

Любой проект — это дерево каталогов и файлов. Терминал не отменяет эту картину, он просто даёт короткие глаголы для работы с ней: md создаёт каталог, mf — файл, dir показывает дерево на нужную глубину.

Полезно явно писать пути. project/notes/ideas.txt сразу говорит и что это за файл, и где он лежит. Понятные пути делают команды читаемыми через месяцы и помогают переносить сценарии.

Соберите маленький проект из пустой папки

Создайте отдельные каталоги для ресурсов, конфигурации и заметок. Это обычная организация файловой системы, а не особенность lil-terminal.

После создания сразу попросите dir показать результат. Вывод терминала становится подтверждением того, что дерево получилось именно таким, как вы задумали.

cd lil-playground
md project | md project/assets | md project/config | md project/notes
mf project/notes/ideas.txt | mf project/config/app.ini
dir 3 project -G -a

Сначала посмотрите, потом меняйте

stat отвечает на вопросы об одном пути: что это, какой размер, время изменения и другие метаданные. dir отвечает на другой вопрос — что лежит вокруг. Перед операцией, где важно назначение, эти две команды хорошо дополняют друг друга.

Это полезнее, чем надеяться на один «безопасный флаг». Терминал не знает, что две почти одинаково названные папки для вас имеют совершенно разный смысл; контекст добавляете вы.

stat project/notes/ideas.txt
dir 2 project -G -a

Копировать, переместить и переименовать — три разных намерения

copy сохраняет исходник и создаёт копию. mov меняет место. ren меняет имя или позволяет явно указать исходный путь и новое имя. Когда намерения разделены, команду легко прочитать даже спустя время.

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

copy project/notes/ideas.txt project/notes/ideas.copy.txt
ren project/notes/ideas.copy.txt ideas-archive.txt
md project/archive
mov project/notes/ideas-archive.txt project/archive

Ищите по проекту, а не открывайте папки по очереди

find умеет искать имена, файлы, каталоги и текст внутри указанного пути. Здесь терминал часто резко выигрывает у ручного просмотра: вы описываете то, что ищете, а не маршрут из папки в папку.

Начинайте с узкого диапазона. Найдите имя файла внутри project, затем попробуйте поиск текста в том же маленьком дереве. Та же модель потом работает и на большом проекте.

find ideas -f -p project
find app -f -e ini -p project/config
find archive -F -p project

Для удаления нужен отдельный ритуал

Удаление — тот случай, где скорость почти ничего не даёт. Создайте одноразовую папку project/tmp, посмотрите её содержимое и только затем удалите рекурсивно. Никогда не переносите разрушительный пример в настоящий проект, не перепроверив путь вручную.

Хорошее правило: чем короче команда удаления, тем внимательнее проверяйте её цель. Терминал умеет удалить быстро, поэтому ваш процесс должен делать цель очевидной.

md project/tmp | mf project/tmp/throw-away.txt
dir 2 project/tmp -G -a
del project/tmp -r

Каркас проекта — уже автоматизация

Если новые проекты постоянно начинаются с одинаковых папок, перестаньте собирать их вручную. Сохраните проверенную последовательность в .lil. Получится переносимый каркас проекта.

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

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

Сохраните это как project-skeleton.lil. Сценарий создаёт маленькую предсказуемую структуру. Для нового проекта меняйте только действительно проектные имена, а проверенную основу переносите дальше.

#lil
@install md mf dir stat copy ren mov find
cd lil-playground
md project
md project/assets
md project/config
md project/notes
mf project/notes/ideas.txt
dir 3 project -G -a