5

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

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

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

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

提前一百万谢谢。

4

3 回答 3

12

你正在寻找--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 参数,以便 GNUtar看到通配符,如*. 如果您不这样做,shell 可能会*使用手头的文件扩展自身,因此tar可能会收到文件列表而不是一个模式,或者根本没有,从而使命令有些非法。这可能与您想要的不符。

例如,写:

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

而不是:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
  • regexptar. _ 如果您尝试使用 regexp语法来描述要排除的文件,您的命令可能会失败。
于 2009-06-27T15:51:34.393 回答
3
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/
于 2009-06-27T15:50:09.683 回答
0

这应该有效(假设 GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/
于 2009-06-27T15:51:28.060 回答