Linux tar命令:压缩目录但不包括子目录

时间:2009-06-27 15:47:42

标签: php command-line tar

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

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

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

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

提前感谢一百万。

3 个答案:

答案 0 :(得分: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引入文件名 其中包含一个模式列表,每行一个;每一个 模式可以排除零个,一个或多个文件。

  • 使用tar时,请务必引用PATTERN 参数,因此GNU *看到像*这样的通配符。如果你 如果不这样做,shell可能会使用文件扩展tar本身 因此,$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY 可能会收到一个文件列表而不是一个 模式,或根本没有,使命令有点非法。 这可能与您想要的不符。

例如,写:

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

而不是:

regexp
  • 您必须使用use shell语法或globbing,而不是tar 语法,在regexp中使用排除选项时。如果你试图使用 {{1}}语法用于描述要排除的文件,即命令 可能会失败。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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