场景:我在托管我的网站的服务器上有一个目录,其中包含数百个用户提交的图像。我正在创建一个备份脚本,它从目录中获取所有图像并将它们压缩到一个 .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/子目录。
提前致谢。
最佳答案
您正在寻找 --exclude
参数。
--exclude=PATTERN
一些用户发现 exclude
选项令人困惑。以下是一些常见的陷阱:
tar
的主要运行方式不作用于路径名 如果其中一个文件名在命令行中明确列出 组件被排除在外。在上面的示例中,如果您创建一个 归档并排除以*.o
结尾但明确命名的文件 列出所有选项后的文件dir.o/foo
,dir.o/foo
将从存档中排除。有时您可能会混淆
--exclude=PATTERN
和--exclude-from=FILE-OF-PATTERNS
(-X FILE-OF-PATTERNS
)。是 注意:当要排除的文件是 在命令行上作为模式给出。采用--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
- 您必须使用 shell 语法或通配符,而不是
regexp
语法,在tar
中使用排除选项时。如果你尝试使用regexp
语法来描述要排除的文件,你的命令 可能会失败。
关于php - Linux tar 命令 : compressing a directory but exluding subdirectories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053065/