202502141432

先看一条tar命令

cd $HOME
tar -cvpaf ../home.tgz * --exclude-caches --exclude-caches-all --exclude-vcs --exclude-tag-all="skip_tar.tag"

一看以为是备份home目录,结果输出发现你想排除的目录压根没有排除,这是因为,—exclude选项要放在前面,改成这样就行了

tar --exclude-caches-all --exclude-vcs --exclude-tag-all=skip_tar.tag -cvpaf ../home.tgz *

然后这里还有一个坑,你以为*会包含隐藏目录?不会的,试试echo *。一般的,*在ls命令和bash展开中不会包含隐藏文件(即以.开头的文件),但是tar不care(find命令也不care),但这里写的*其实是bash展开。正确写法应该是

tar --exclude-caches-all --exclude-vcs --exclude-tag-all=skip_tar.tag -cvpaf ../home.tgz .

这样tar的目标是当前目录,而tar默认会包含隐藏文件。

see: https://unix.stackexchange.com/a/31976