php - Linux tar 命令 : compressing a directory but exluding subdirectories

标签 php command-line tar

场景:我在托管我的网站的服务器上有一个目录,其中包含数百个用户提交的图像。我正在创建一个备份脚本,它从目录中获取所有图像并将它们压缩到一个 .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/foodir.o/foo 将从存档中排除。

  • 有时您可能会混淆 --exclude=PATTERN--exclude-from=FILE-OF-PATTERNS(-X FILE-OF-PATTERNS)。是 注意:当要排除的文件是 在命令行上作为模式给出。采用 --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 语法来描述要排除的文件,你的命令 可能会失败。

关于php - Linux tar 命令 : compressing a directory but exluding subdirectories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053065/

相关文章:

encryption - 使用 OpenSSL 进行 Tar 和加密,并将结果直接转储到 ssh 服务器

PHP:带状包装段落标签

php - 从数据库计算平均年龄,合并 2 个查询

php - 如何为 PHP 安装 ffmpeg

php - 如何删除 Dotdeb 版本的 PHP 并将其替换为官方 Ubuntu 存储库

python - Python 的 `tarfile` 模块是否将它正在构建的文件存储在内存中?

php - 如何在 PHP 中创建自定义模板系统

mysql - 从终端打开 MySQL

linux - grep -1 卡住,但它应该报告无效标志

python - 如何使用 python 2.4 提取 tar 文件?