创建 .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 <target_file.tar.gz> --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 文件时排除目录的主要内容,如果未能解决你的问题,请参考以下文章