Коротко об lndir
Небольшая заметка о утилите, которая требуется редко, но метко – lndir
.
Когда у меня стало больше одного Мака, появилась проблема синхронизации настроек. Другими словами, чтобы всякие .thisrc
и .thatrc
были одинаковы и подхватывались при изменении. Сюда входит конфиг Emacs, ssh, словари aspell, профили AWS, конфиги ctags, zshell и многое другое.
Легче всего держать dot-файлы в репозитории и ставить симлинки. Неожиданно я столкнулся с тем, что не так легко написать shell-скрипт, который бы поставил симлинки на файлы из папки. Пытался при помощи find ... -execute
и xargs
, но постоянно что-то мешало. То отсутствие файла, то его существование, словом, всякие досадные случаи. В итоге было две команды: сначала одна удаляет симлинки, а вторая создает их заново.
Оказалось, что lndir
делает именно то, что я искал. Они принимает две папки и строит дерево симлинков из первой во вторую. При этом учитывает случаи, что я перечислил, например если симлинк уже есть. Благодаря этому дерево можно обновлять итеративно.
Пример: в каталоге ~/work/System/Dotfiles
хранятся оригинальные файлы Emacs, .ssh
и прочие. Следующая команда make расставит симлинки в домашнюю папку:
HOME = /Users/ivan
PWD = $(shell pwd)
create-symlinks:
lndir ${PWD}/Dotfiles ${HOME}
chmod 600 ${HOME}/.ssh/*
Для файлов ssh необходимо выставить права 600, иначе утилита ругается.
Синхронизация происходит обычным способом через git. Как только вы поменяли один из файлов, делаете коммит и пуш. На другой машине пулл и make create-symlinks
, и все подхватывается. Репозиторий, понятно, должен быть приватным.
По умолчанию lndir
нет в поставке Линукса и Мака. Ставится из привычных apt
и brew
.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Yury, 9th Oct 2022, link
Это все прекрано, но просто к слову
есть stow (https://www.gnu.org/software/stow/)
lndir судя по всему не умеет в относительные пути: lndir ./src ./dest ./src: No such file or directory
все эти штуки не умеют в backup если вдруг файл уже есть lndir ${HOME}/tmp/src ${HOME}/tmp/dest hello.txt: File exists
Собственно поэтому наступив уже на все это пришлось когда-то накостылить https://github.com/yantonov/dot урезанный вариант stow (опций меньше, но базовый сценарий с рекурсивным обходом и втыканием симлинок закрывает, в предположении что симлинки на каталоги не нужны вовсе); backup файлов если вдруг они есть создается автоматически чтобы не переписать случайно что-то важное.
Yury, 9th Oct 2022, link
Кстати, а капча что-то отличное от 8x1 показывает?
Ivan Grishaev, 9th Oct 2022, link
Не знал о таком, буду смотреть, спасибо.
Верно, не умеет, поэтому приходится подставлять PWD
Капча меняется при каждой сборке блога. В этом посте она уже 1x7.
Denis, 10th Oct 2022, link
Мне больше https://github.com/twpayne/chezmoi нравится для синхронизации настроек. Позволяет ко всему прочему еще и шаблоны использовать, для получения корректных настроек для разных машин. К примеру, если тип CPU отличается или еще что
Ivan Grishaev, 10th Oct 2022, link
Посмотрел chezmoi, полезная вещь, спасибо. Вообще, не знал, что так много утилит для этой задачи.