我使用以下命令创建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
答案 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通用来说是非常重要的,而很少见的没有足够的压力,应该得到更多的评论。
因此,我不会尝试针对每种情况回答该问题,而是尝试在无法解决问题的地方寻找位置。
非常重要的通知:
对于我来说,对于Debian Stretch上的GNU tar 1.29,有效的命令是
tar --exclude="/home/user/.config/chromium" --exclude="/home/user/.cache" -cf file.tar /dir1/ /home/ /dir3/
引号无关紧要,无论是否使用引号都可以。
我希望这对某人有用。