使用tar时排除目录

时间:2013-12-30 14:42:45

标签: unix tar

我使用以下命令创建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中的文件,而不是文件夹+不包含./ in filename

2 个答案:

答案 0 :(得分:0)

如果要对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的{​​{1}}列表传递给tar .....

答案 1 :(得分:0)

在阅读了所有不同版本的所有好的答案并为自己解决了问题之后,我认为有非常小的细节,对于GNU / Linux通用来说是非常重要的,而很少见的没有足够的压力,应该得到更多的评论。

因此,我不会尝试针对每种情况回答该问题,而是尝试在无法解决问题的地方寻找位置

非常重要的通知:

  1. 选项事项的顺序:将--exclude放在文件选项和要备份的目录之前与之后是不同的。至少对我来说这是意外的,因为根据我的经验,在GNU / Linux命令中,选项的顺序通常无关紧要。
  2. 不同的tar版本希望此选项以不同的顺序排列:例如,@Andrew's answer表示在GNU tar v 1.26和1.28中,排除项排在最后,而在我的情况下,对于GNU tar 1.29,这是另一种方式。
  3. 拖尾陷阱问题:至少在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/

引号无关紧要,无论是否使用引号都可以。

我希望这对某人有用。