受 stow 启发的一个 Linux 下点文件管理项目(bash 实现)。
***********************************
*** 目前还是实验性质的! ***
***********************************
整(统一码: U+6574)笔画数 16 所以我就用 z16 来当英文名了。
之所以选它,是因为这个字的含义很丰富,能表示:
- 做一件事
- 有序的
- 有条理的
- 听起来比较敏捷
- 并且简明
-
Gentoo Linux
eselect repository enable ryans #或 `layman -a ryans && layman -S` echo "\napp-admin/z16 **" >> /etc/portage/package.accept_keywords emerge -av app-admin/z16 z16
-
其他
git clone https://github.com/bekcpear/z16.git cd z16 ./z16.sh
加载属于 etc, home-misc 和 vim 实例的所有文件:
z16 load etc home-misc vim
通过 ssh 加载属于 etc 实例的文件到远程服务器并保持 30 分钟的连接:
z16 -s alice@my.azure -i ~/.ssh/alice.key -k30M load etc
卸载属于 home-misc 实例的文件:
z16 unload home-misc
-
确保 z16 可以读取到它的配置文件
z16 #默认显示帮助信息
z16 会先检查它系统级别的配置文件,然后检查用户级别的。
如果这两个配置文件都不存在,那么 z16 会提示初始化它自己。
请阅读下文的 如何配置 一节以获取更详细的说明。
-
初始化实例:
z16 init <实例> [<更多的实例>...]
在初始化实例时, z16 会从它的基础配置文件中获取用于存储实例的文件夹路径。
然后 z16 会在该文件夹下创建实例文件夹(名字同实例名),并生成一个被注释掉的本地配置文件。
-
把你的文件放在适用的实例文件夹下,并修改实例的本地配置文件,尤其是
parentdir
这个配置。 -
现在可以加载配置好的实例:
z16 load <配置好的实例> [<更多配置好的实例>...]
z16 会:
- 迭代式地在一个临时目录下对实例文件夹下的所有文件创建软链接(除本地配置文件及配置的忽略文件外),且会把前缀为
dot-
(大小写不敏感)的文件/目录替换该前缀为.
。 - 修改软链接及其目标文件的所有者为配置的用户/组 或 当前生效的用户/组
- 如果一切正常, z16 会把临时目录下的软链接合并到根文件系统下。如果使用了
-s
参数,z16 会根据配置好的路径把实例所拥有的文件推到服务器上对应的路径下。
- 迭代式地在一个临时目录下对实例文件夹下的所有文件创建软链接(除本地配置文件及配置的忽略文件外),且会把前缀为
-
unload
命令用于直接删除给定实例的所有软链接,并且删除实例配置的父目录下的所有空文件夹。z16 unload <配置好的实例> [<更多配置好的实例>...]
-
目前,如果需要重命名实例,请在重命名实例目录后执行
--force load
。
z16 有好几个配置文件:
-
基础配置文件
- 系统级别,
/etc/z16/z16rc
- 用户级别,默认为
${HOME}/.config/z16/z16rc
目前,以上两个配置文件用于配置:
- 存储实例的文件夹路径,默认为
${HOME}/.local/share/z16
- 用于所有实例的全局配置文件的名字,默认为
.z16.g.conf
用户级别的配置文件下的配置会覆盖系统级别的配置
以上两个配置文件至少存在一个。
- 系统级别,
-
用于所有实例的全局配置文件,
<存储实例的文件夹>/<全局配置文件名>
目前,这个配置文件用于配置:
- 用于每个实例的本地配置文件的名字,默认为
.z16.l.conf
- 用于每个实例的默认父级目录,它通常被设置为一个安全的路径,以避免因实例漏写父级目录而可能出现的破坏系统文件行为。默认为
/tmp/z16.tmp.d
- 软链接及其目标文件的用户,默认为当前生效的用户。
- 软链接及其目标文件的组,默认为当前生效的组。
- 用于所有实例的忽略文件匹配表达式,每个表达式由逗号分隔且为 POSIX 扩展的正则表达式。
- 用于每个实例的本地配置文件的名字,默认为
-
用于单个实例的本地配置文件,
<实例文件夹>/<本地配置文件名>
目前,这个配置文件用于配置:
- 此实例的父级文件夹,每次实例初始化时都应该配置这个配置
- 软链接及其目标文件的用户,默认为全局设置的用户。
- 软链接及其目标文件的组,默认为全局设置的组。
- 用于当前实例的忽略文件匹配表达式,每个表达式由逗号分隔且为 POSIX 扩展的正则表达式。
忽略文件匹配表达式的配置是累积的(本地配置会包含全局下的忽略文件配置)。以 !
开头的表达式用于删除所有被其能精确匹配的在其之前已经添加的表达式。
GPLv2