使用 tar 时排除目录

Posted

技术标签:

【中文标题】使用 tar 时排除目录【英文标题】:Exclude directory while using tar 【发布时间】:2014-01-17 11:13:36 【问题描述】:

我使用下面的命令来创建一个 tar.gz

tar -pczf domain.com.tar.gz  /var/www/domain.com/public_html/www/ 

tar.gz 文件包含以下文件夹

var-->www-->domain.com-->public_html-->www-->then the content of www

我希望 tar.gz 文件只包含 www 的内容而没有任何文件夹。我尝试使用 -C 但我明白了

胆小拒绝创建空存档错误

tar -pczf domain.com.tar.gz -C  /var/www/domain.com/public_html/www/ 

编辑 1 我添加了.,但随后exclude 不再起作用,所有文件的文件名中都有./

档案中的文件名变成 .\file.txt

tar -pczf domain.com.tar.gz -C  /var/www/domain.com/public_html/www/ . --exclude='/var/www/domain.com/public_html/www/tmp/*'

实例

tar --exclude='tmp/cookies/*' --exclude='tmp/logs/*' -pczf filterbypass.me.tar.gz -C /var/www/filterbypass.me/public_html/www .

我希望 tar,gz 只包含我在 www 中的文件,而不是文件夹 + 不是 ./ 在文件名中

【问题讨论】:

你是如何使用-C的? tar -C /var/www/domain.com/public_html/www -pczf domain.com.tar.gz .? 检查编辑...实际命令中还有--exclude 您是否在命令末尾添加了.,否则您没有任何内容可添加到存档中...? -C 更改目录,. 是您刚刚更改为要添加的当前目录。 谢谢....但它仍然无法正常工作,请检查我的编辑 查看我编辑的答案以获得你想要的;) 【参考方案1】:

在阅读了针对不同版本的所有这些好的答案并为自己解决了问题之后,我认为有非常小的细节非常重要,并且对于 GNU/Linux 的一般用途来说很少见,它们是压力不够,比 cmets 更值得。

所以我不会尝试针对每种情况都回答这个问题,而是尝试在事情不起作用时注册在哪里查看

请注意:

    选项的顺序很重要:将 --exclude 放在文件选项和要备份的目录之前与之后是不一样的。这至少对我来说是出乎意料的,因为根据我的经验,在 GNU/Linux 命令中,选项的顺序通常并不重要。 不同的 tar 版本需要此选项以不同的顺序: 例如,@Andrew's answer 表示在 GNU tar v 1.26 和 1.28 中,排除项排在最后,而在我的情况下,对于 GNU tar 1.29,它是另一个方式。 尾部斜线很重要:至少在 GNU tar 1.29 中,不应该是任何

就我而言,对于 Debian stretch 上的 GNU tar 1.29,有效的命令是

tar --exclude="/home/user/.config/chromium" --exclude="/home/user/.cache" -cf file.tar  /dir1/ /home/ /dir3/

引号无关紧要,有无引号都可以。

我希望这对某人有用。

【讨论】:

【参考方案2】:

如果你想对www的内容进行tar,你不能把完整的路径放到-C中。改为这样做:

tar -pczf domain.com.tar.gz -C /var/www/domain.com/public_html/www .

这样,'www' 是要压缩的目录,但通过将其包含到 -C 路径中而省略了自身。稍后您将提取“www”目录的所有文件。

除了您的编辑(排除)之外,它必须如下所示:

tar --exclude=tmp -pczf domain.com.tar.gz -C /var/www/domain.com/public_html/www .

编辑

根据您的意愿,我找到了一个有趣但可行的解决方案。您使用 exclude 排除您想要的目录(请参阅您的 tar 的手册页,也有一些带有 --no-recurse 选项的目录)并且您根本没有 ./ 语法:

ls /var/www/domain.com/public_html/www | xargs tar --exclude=tmp -C /var/www/domain.com/public_html/www -pczf domain.com.tar.gz

您将文件名提供给输入的方式就是 tar 存储它的方式。因此,使用-C 甚至可以在没有./ 的情况下存储文件,但您需要将ls| xargs 的列表传送到tar.....

【讨论】:

关于tar--exclude 的两个要点:不要在路径中使用斜杠,任何--exclude 都必须是@ 中的第一个选项987654334@ 命令。 它快到了老兄.....现在我有www文件夹-->文件内容。我不希望文件内容在任何文件夹中。只需更正它,以便内容不在www 内。 好的,比用 www 扩展 -C 并放一个 .在末尾。我将在一秒钟内编辑我的答案。 我使用它,但现在我的文件在文件名中包含./ + 我得到了一个没有名称的文件,只有一个。检查我的真实示例编辑

以上是关于使用 tar 时排除目录的主要内容,如果未能解决你的问题,请参考以下文章

如何使 tar 排除隐藏目录

使用tar时排除目录

创建 .tar.gz 文件时排除目录

linux使用tar命令打包压缩时排除某个文件夹或文件

压缩时排除选定的子目录

AIX下tar排除目录