【问题标题】:Linux tar command: compressing a directory but exluding subdirectoriesLinux tar 命令:压缩目录但不包括子目录
【发布时间】:2009-06-27 15:47:41
【问题描述】:

场景:我在托管我的网站的服务器上有一个目录,其中包含数百个用户提交的图像。我正在创建一个备份脚本,该脚本从目录中获取所有图像并将它们压缩到一个 .tar.gz 文件中。到目前为止我的命令是:

tar -czpf /path/to/backups/my_backup.tar.gz path/to/images/

问题: 在我的 path/to/images/ 内没有 我有一个名为温度/。当我运行命令时,我得到一个 .tar.gz 文件,其中包含 path/to/images/ 目录和一个名为 tmp/ 的子目录中的所有图像。

问题:如何让命令跳过/不包含 .tar.gz 文件中的 tmp/ 子目录。

提前一百万谢谢。

【问题讨论】:

    标签: php command-line tar


    【解决方案1】:

    您正在寻找--exclude 参数。

    --exclude=PATTERN
    

    一些用户发现exclude 选项令人困惑。以下是一些常见的陷阱:

    • tar的主要运行模式不作用于路径名 如果其文件名之一显式列出在命令行上 组件被排除在外。在上面的示例中,如果您创建一个 归档和排除以*.o 结尾但明确命名的文件 列出所有选项后的文件dir.o/foodir.o/foo 将从存档中排除。

    • 您有时会混淆--exclude=PATTERN--exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS)。是 小心:当要排除的文件是 --exclude=PATTERN 在命令行上作为模式给出。利用 --exclude-from=FILE-OF-PATTERNS 介绍文件名 其中包含一个模式列表,每行一个;这些中的每一个 模式可以排除零个、一个或多个文件。

    • 当你使用--exclude=PATTERN时,一定要引用PATTERN 参数,所以 GNU tar 会看到像 * 这样的通配符。如果你 不要这样做,shell 可能会使用文件扩展 * 本身 手头,所以tar 可能会收到一个文件列表而不是一个 模式,或者根本没有,使命令有些非法。 这可能与您想要的不符。

    例如写:

    $ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY
    

    而不是:

    $ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
    
    • 您必须使用 shell 语法或通配符,而不是 regexp 语法,在 tar 中使用排除选项时。如果您尝试使用 regexp 语法来描述要排除的文件,你的命令 可能会失败。

    【讨论】:

    • 感谢您的回答。你说得对, --exclude 可能有点令人困惑。在我阅读您的解释之前,我自己并没有 100% 理解它。谢谢
    【解决方案2】:
    tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/
    

    【讨论】:

      【解决方案3】:

      这应该可以工作(假设 GNU tar):

      tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/
      

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多