命令行工具们有一个约定俗成的习惯:把配置文件写到用户的Home目录下面的隐藏文件里。系统用的时间一长,这样的文件就有一堆,有些你编辑过了,有些没有,并且你都不知道里面有些什么。先来看一下你有多少个这样的文件吧:
1 |
ls -ald ~/.* | grep -v ^l | tee >(wc -l) |
也许你已经想到了一千种方法来折腾它们。在用户目录下面 git init 一下?这可不是什么好主意。把它们手工复制到某个地方然后手工 ln -s 回来?这也太麻烦了。然而我们现在有个叫stow的工具可以自动化处理这一切。
GNU stow本来是为了用于管理软件包安装以及多版本共存的一个程序。它做的主要工作就是根据目录来自动建立软链接。这样就正好满足了我们的需求。首先把所有的配置文件复制到某个文件夹去,然后运行一下 stow ,它们就自动链接好了。
这样还是有些太烦了。所以我写了个Bash函数来自动处理这一切。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
export DOTFILES=~/dotfiles dotfiles-count() { pushd >/dev/null 2>&1 cd $HOME ls -ald .* | grep -v ^l | tee >(wc -l) popd >/dev/null 2>&1 } dotfiles-init() { pushd >/dev/null 2>&1 cd $HOME ls -ald .$1*; mkdir -p $DOTFILES/$1; mv .$1* $DOTFILES/$1; stow --dir=$DOTFILES --target=$HOME -vv $1 popd >/dev/null 2>&1 } dotfiles-rebuild() { stow --dir=$DOTFILES --target=$HOME -vv $@ } |
比如我们要处理来自vim的配置文件,只需要运行 dotfiles-init vim ,一切就自动完成。想用Git管理配置文件?没问题,去 $DOTFILES 下面 git init 一下。想用网盘同步?没问题,把 $DOTFILES 设置到你的网盘目录下面。想移动你的存放目录,或者在另一台机器上恢复配置?没问题,改下 $DOTFILES 然后运行 dotfiles-rebuild * 就好(如果你关掉了Shell并且没链接配置文件,那么祝贺你作死成功……)。
这样是不是干净多了呢?
参考:
感觉是目前用过最方便的姿势了