创建.tar.gz文件时不包括目录


119

我有一个/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的数据,而且我可以肯定地知道,/public_html/没有tar /tmp/的文件不会超过1GB。

我做错什么了?



-p选项对create函数没有任何意义,对吧?
马丁·施耐德

Answers:


201

尝试删除目录路径末尾的/

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

7
要排除整个文件夹及其内容:tar -pczvf MyBackup.tar.gz / home / user / public_html /
排除

我进入tar: Error exit delayed from previous errors.macos
祈祷

获取错误tar:从成员名称中删除开头的“ /”
SenG

2
不起作用,我不得不使用--exclude="/home/user/public_html/tmp代替--exclude "/home/user/public_html/tmp
Black Black

1
忽略我先前无法再编辑的评论:首先exclude需要指定为stackoverflow.com/users/3904223/oussaka注释。至少那是唯一对我
有用的

46

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

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

谢谢,这对我来说适用于旧的Ubuntu 14.04 LTS盒。
Jamsi

1
我也需要在OS X上执行此操作。
TheJacobTaylor

16

是的,删除尾随/路径(至少在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"

将工作


1
当我在排除参数中删除绝对路径时,为我工作。
jruzafa

2
在这里,有关混合绝对路径和相对路径的技巧对我来说很关键
Dmitri DB

12

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

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

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

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

tar -tf backup.tar.gz

3

试试这个

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

2

您也可以只使用一个排除多个--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 /之间

语法为:

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

2

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

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

然后它起作用了。


2

这对我有用:

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

2

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中测试。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.