场景:我在托管我网站的服务器上有一个目录,其中包含数百个用户提交的图像。我正在创建一个备份脚本,它从目录中获取所有图像并将它们压缩成一个.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 /子目录。
提前感谢一百万。
答案 0 :(得分:12)
您正在寻找--exclude
参数。
--exclude=PATTERN
有些用户发现exclude
选项令人困惑。以下是一些常见的陷阱:
tar
的主要操作模式不对路径名起作用
如果其中一个文件名,则在命令行中明确列出
组件被排除在外。在上面的示例中,如果您创建一个
归档和排除以*.o
结尾的文件,但显式命名
列出所有选项后的文件dir.o/foo
,
dir.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
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/