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

Posted

技术标签:

【中文标题】创建 .tar.gz 文件时排除目录【英文标题】:Excluding directory when creating a .tar.gz file 【发布时间】:2011-05-16 11:11:35 【问题描述】:

我有一个 /public_html/ 文件夹,在该文件夹中有一个 /tmp/ 文件夹,其中包含大约 70gb 的我并不真正需要的文件。

现在我正在尝试创建一个 .tar.gz/public_html/ 不包括 /tmp/

这是我运行的命令:

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/" 

tar 仍在创建中,通过执行 ls -sh 我可以看到 MyBackup.tar.gz 已经有大约 30GB,而且我确定没有 /tmp//public_html/ 不会超过 1GB文件。

我做错了什么?

【问题讨论】:

Shell command to tar directory excluding certain files/folders的可能重复 -p 选项在创建函数方面没有任何意义,对吧!? 【参考方案1】:

尝试删除要排除的目录路径末尾的最后一个 /

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 

【讨论】:

排除整个文件夹及其内容:tar -pczvf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/*" 我在macos中得到tar: Error exit delayed from previous errors. 收到错误 tar:从成员名称中删除前导 `/' 不起作用,我不得不使用--exclude="/home/user/public_html/tmp 而不是--exclude "/home/user/public_html/tmp 忽略我之前无法再编辑的评论:exclude 需要首先指定为 ***.com/users/3904223/oussaka 注释。至少那是唯一对我有用的东西【参考方案2】:

尝试将--exclude 移到包含之前。

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 

【讨论】:

谢谢,这在旧的 Ubuntu 14.04 LTS 机器上对我有用。 我也需要在 OS X 上执行此操作。 删除斜杠后为我工作:tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp" /home/user/public_html【参考方案3】:

是的,删除结尾的 / 并且(至少在 ubuntu 11.04 中)所有给定的路径必须是相对路径或完整路径。您不能在同一命令中混合使用绝对路径和相对路径。

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "home/user/start-directory/logs"

不会排除日志目录但

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "./start-directory/logs"

会起作用

【讨论】:

当我在排除参数中删除绝对路径时为我工作。 关于混合绝对路径和相对路径的提示对我来说很关键【参考方案4】:

从压缩中排除目录的正确命令是:

tar --exclude='./folder' --exclude='./upload/folder2' -zcvf backup.tar.gz backup/

确保将 --exclude 放在源项和目标项之前

您可以在不解压缩的情况下查看 tar.gz 文件的内容:

tar -tf backup.tar.gz

【讨论】:

谢谢...这在 Ubuntu 18.04 LTS 上对我有用【参考方案5】:

您也可以只使用一个--exclude 来排除多个。像这个例子:

tar -pczf MyBackup.tar.gz --exclude="/home/user/public_html/tmp","/home/user/public_html/data" /home/user/public_html/

--exclude= 中,您必须完成不带/ 的目录名称,并且必须在MyBackup.tar.gz/home/user/public_html/ 之间p>

语法是:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>

【讨论】:

【参考方案6】:

接受的答案对我不起作用,在 windows10 上运行 unxutils tar。相反,我不得不将文件/目录归档为 last 参数,如下所示:

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/

然后它起作用了。

【讨论】:

【参考方案7】:

tar -pczf &lt;target_file.tar.gz&gt; --exclude /path/to/exclude --exclude /another/path/to/exclude/* /path/to/include/ /another/path/to/include/*

在 Ubuntu 19.10 中测试。

    exclude 之后的= 是可选的。如果您愿意,可以在关键字exclude 之后使用= 代替空格。 参数exclude必须放在源之前。 使用文件夹名称(如第 1 个)或 *(如第 2 个)之间的区别是:第 2 个将在包中包含一个空文件夹,但第 1 个不会。

【讨论】:

【参考方案8】:

试试这个

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp

【讨论】:

【参考方案9】:

这对我有用:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"

【讨论】:

【参考方案10】:

exclude 选项需要包含= 符号," 不是必需的。

--exclude=/home/user/public_html/tmp

【讨论】:

如果文件夹名称中有空格,则需要 "

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

linux下面tar打包, 排除某个特定的目录( 只对一个目录操作, 不对其他目录操作)

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

如何使 tar 排除隐藏目录

【tar】tar命令exclude选项排除指定文件或目录

使用tar时排除目录

linux文件夹内文件复制,如何排除某个文件