Я пытаюсь сохранить все свои конфигурационные файлы профиля (~/.xxx) в мерзавце. Я довольно ужасен в сценариях удара, но я предполагаю, что это будет довольно прямым для Вас пишущий сценарий гуру.
В основном я хотел бы сценарий, который создаст символьные ссылки в моем корневом каталоге в файлы в моем repo. Скручивание, я хотел бы его, предупреждают и запрашивают перезапись, если символьная ссылка будет перезаписывать фактический файл. Это должно также запросить, если символьная ссылка будет перезаписанной, но путь назначения отличается.
Я не возражаю вручную редактировать сценарий для каждой ссылки, которую я хочу создать. Я более обеспокоен способностью быстро развернуть новые сценарии конфигурации путем запущения этого скрипта, сохраненного в моем repo.
Какие-либо идеи?
Команда ln
уже консервативна в отношении стирания, поэтому, возможно, вам подходит подход KISS:
ln -s git-stuff/home/.[!.]* .
Если файл или ссылка уже существует, вы получите сообщение об ошибке и эту ссылку будут пропущены.
Если вы хотите, чтобы файлы имели другое имя в вашем репозитории, передайте параметр -n
параметру ln
, чтобы случайно не создать символическую ссылку в существующем подкаталоге. с этим именем:
ln -sn git-stuff/home/profile .profile
...
Если вы также хотите иметь ссылки в подкаталогах вашего домашнего каталога, cp -as
воспроизводит структуру каталогов, но создает символические ссылки для обычных файлов. С параметром -i
он запрашивает, существует ли цель уже.
cp -i -as git-stuff/home/.[!.]* .
(В моем ответе предполагается, что GNU ln
и GNU cp
, например, вы можете найти в Linux (и Cygwin), но обычно не в других UNIX.)
Следующее имеет условия гонки, но это, вероятно, настолько безопасно, насколько вы можете получить без транзакций файловой системы:
# create a symlink at $dest pointing to $source
# not well tested
set -e # abort on errors
if [[ ( -h $dest && $(readlink -n "$dest") != $source ) || -f $dest || -d $dest ]]
then
read -p "Overwrite $dest? " answer
else
answer=y
fi
[[ $answer == y ]] && ln -s -n -f -v -- "$source" "$dest"