【问题标题】:Excluding directory when creating a .tar.gz file创建 .tar.gz 文件时排除目录
【发布时间】:2011-05-16 11:11:35
【问题描述】:

我有一个 /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,而且我确定没有 /tmp//public_html/ 不会超过 1GB文件。

我做错了什么?

【问题讨论】:

标签: linux gzip tar compression


【解决方案1】:

尝试删除要排除的目录路径末尾的最后一个 /

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

【讨论】:

  • 排除整个文件夹及其内容:tar -pczvf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/*"
  • 我在macos中得到tar: Error exit delayed from previous errors.
  • 收到错误 tar:从成员名称中删除前导 `/'
  • 不起作用,我不得不使用--exclude="/home/user/public_html/tmp 而不是--exclude "/home/user/public_html/tmp
  • 忽略我之前无法再编辑的评论:exclude 需要首先指定为 stackoverflow.com/users/3904223/oussaka 注释。至少那是唯一对我有用的东西
【解决方案2】:

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

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

【讨论】:

  • 谢谢,这在旧的 Ubuntu 14.04 LTS 机器上对我有用。
  • 我也需要在 OS X 上执行此操作。
  • 删除斜杠后为我工作:tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp" /home/user/public_html
【解决方案3】:

是的,删除结尾的 / 并且(至少在 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"

会起作用

【讨论】:

  • 当我在排除参数中删除绝对路径时为我工作。
  • 关于混合绝对路径和相对路径的提示对我来说很关键
【解决方案4】:

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

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

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

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

tar -tf backup.tar.gz

【讨论】:

  • 谢谢...这在 Ubuntu 18.04 LTS 上对我有用
【解决方案5】:

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

语法是:

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

【讨论】:

    【解决方案6】:

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

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

    然后它起作用了。

    【讨论】:

      【解决方案7】:

      tar -pczf &lt;target_file.tar.gz&gt; --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. 使用文件夹名称(如第 1 个)或 *(如第 2 个)之间的区别是:第 2 个将在包中包含一个空文件夹,但第 1 个不会。

      【讨论】:

        【解决方案8】:

        试试这个

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

        【讨论】:

          【解决方案9】:

          这对我有用:

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

          【讨论】:

            【解决方案10】:

            exclude 选项需要包含= 符号," 不是必需的。

            --exclude=/home/user/public_html/tmp
            

            【讨论】:

            • 如果文件夹名称中有空格,则需要 "
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多