关于unix:使用tar时排除目录

Exclude directory while using tar

我使用以下命令创建tar.gz

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

tar.gz文件包含以下文件夹

1
var-->www-->domain.com-->public_html-->www-->then the content of www

我希望tar.gz文件只包含www的内容,不包含任何文件夹。我尝试使用-C,但我得到

Cowardly refusing to create an empty archive error

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

编辑1我添加了.,但是exclude不再工作,所有文件的文件名中都有./

文件名变为"存档"中的file.txt

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

实例

1
tar --exclude='tmp/cookies/*' --exclude='tmp/logs/*' -pczf filterbypass.me.tar.gz -C /var/www/filterbypass.me/public_html/www .

我希望tar、gz只包含我在www中的文件,而不包含folders+not./在文件名中


如果您想tar www的内容,就不能将完整的路径放到-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排除你想要的dir(参见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的列表与| xargs连接到tar…..