我在主目录中有一个文件夹,其结构如下:
top-tree
+-- .git
+-- branch1
| +-- branch11
| +-- .idea
| +-- branch111
| +-- branch112
| +-- branch113
| +-- branch114
| +-- branch1141
| +-- branch1142
| +-- branch1143
| +-- branch115
| +-- branch116
| +-- branch117
现在,我想 tar 整个内容,但必须排除所有隐藏目录,例如.git
and.idea
和一个至少有 2 个子目录的特定目录branch114
(子目录的数量可能会不时变化)。
我尝试通过使用带有以下参数的 tar 命令来做到这一点:
tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.git --exclude=~/top-tree/branch1/branch11/.idea top-tree/
tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.*
但上述方法似乎都不起作用。每次,文件夹的全部内容top-tree
都放在archive.tar.gz 中。我已经尝试了这个网站和其他网站中建议的很多东西(很多东西我不能在这里引用,包括这个),玩过参数的排列等。但与其他类似的问题不同,我的似乎是个问题与路径。我使用的 tar 版本是 1.29。为什么这不起作用?
您正在归档表单的路径并排除表单的路径。您的排除模式永远不会匹配任何内容。
top-tree/stuff
/home/skrowten/top-tree/stuff
简单的解决方案是
请注意,如果有例如 a
top-tree/subdir/top-tree/.git
那么这也将被排除在外。避免这种情况的一个技巧是使用 启动命令行路径,并依赖于只会出现在根目录./
的事实。.
如果领先
./
让您感到困扰,请将该选项添加--transform='s!^\./!!'
到 tar 调用中。