我正在尝试将我的主文件夹中的所有内容打包到 tar 中,并且我想排除某些文件夹,例如隐藏文件夹和 test_tree (实际上它嵌套在其他文件夹中)。
我尝试执行这个命令:
tar -vcf everything.tar . --exclude='.*' --exclude='test_tree'
在主目录内部,cd ~
但创建的 tar 完全是空的。到底是怎么回事?
答案1
我有同样的问题,--exclude='.*' 在 MacOS 上工作正常,但在 Linux 上不行。你可以做,
tar -vcf everything.tar 。 --exclude='./.*' --exclude='test_tree'
或者
tar -vcf everything.tar 。 --exclude='.[^/]*' --exclude='test_tree'
答案2
问题在于使用.
作为源代码并告诉 tar 排除以该开头的内容。.
例如,尝试使用绝对路径/home/user
,或者"$PWD"
如果您已经在该目录中,它应该可以正常工作。
答案3
最好的解决方案是用有问题的名称拼凑出一个文件,然后执行以下操作:
tar cf my-precious.tar -X file-of-offenders 。
(不知道 -X 是否是 GNUism,不过……但你似乎正在使用 GNU tar )。
答案4
匹配“隐藏文件”使用 shell 样式模式,使用.[^.]*
.
使用.*
匹配特殊目录条目.
(以及..
)。这通常不是您想要的。