使用tar时排除目录

11 浏览
0 Comments

使用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文件中的文件,没有文件夹,也没有./在文件名中

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果您想要打包 www 文件夹的内容,就不能把完整路径放到 -C 参数里。应该这样做:

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

这样 'www' 文件夹就会被打包,同时也将它所在的目录(即本例的 /var/www/domain.com/public_html)忽略掉。解压缩时只需提取 'www' 文件夹下的所有文件。

除了您的修改(排除部分文件)需使用以下命令:

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

修改

根据您的要求,我找到了一个有趣但能行的解决方案。您可以使用排除(exclude)参数来排除您不想包含的文件夹(在 tar 的 man 页面中,还有一些带有 --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 参数,也可以将文件存储在没有 ./ 的情况下,但需要使用 | xargs 命令将 ls 的列表传递给 tar。

0
0 Comments

读完所有这些不同版本的好答案和为自己解决了问题之后,我认为有一些非常重要的细节对于普通使用GNU/Linux的人来说非常重要,而且很少受到强调,值得比评论更多的关注

因此,我不会尝试回答每种情况下的问题,而是会尝试记录哪里查找当事情不起作用时。

注意非常重要:

  1. 选项的顺序很重要:在文件选项和备份目录之前或之后放置--exclude并不相同。这对我来说至少是出乎意料的,因为在我的经验中,在GNU/Linux命令中,通常选项的顺序并不重要。
  2. 不同版本的tar需要不同的选项顺序:例如,Andrew的答案表明,在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/

引号没有关系,可以带引号也可以不带。

希望这对某人有用。

0