tar打包当前目录时要用.而不是*
使用.打包时,当前目录下的项目是作为目录.的子项目由tar遍历的,会包含当前目录下所有以.开头的隐藏项目
使用*打包时,当前目录下的项目是由bash等shell的通配符展开行为遍历的,不会包含当前目录下所有以.开头的隐藏项目
以下命令会打包当前目录下所有非隐藏项目,不会包含当前目录下所有以.开头的隐藏项目:
tar cvzf /home/backup.tar.gz *
以下命令会打包当前目录下所有目录/文件,包括当前目录下所有以.开头的隐藏目录/文件:
tar cvzf /home/backup.tar.gz .
另一个做法是显式让bash等shell展开当前目录所有以.开头的隐藏项目:
tar cvzf /home/backup.tar.gz .[!.]* ..?* *
注意这里要用.[!.]*(或者.[^.]*)匹配只以一个点开头且两个以上字符的项目,用..?*匹配以两个以上点开头且3个以上字符的项目(如果没有这样的项目可以省略),而不能直接用.*,因为这样会包含.和..,.会导致文件重复打包生成冗余硬链接,而..会导致上层目录的项目被打包放进同级目录