如何进行选择性备份?

ach*_*san 4 backup cp

假设有一个名为domainsin的文件夹glassfish。它有domain1domain2...。domainN

我想从目录中取出所有内容domain1并将logs它们保存到/home/user/backup目录中。

我可以手动执行此操作,

cp -R /home/user/glassfish/domains/domain1 /home/user/backup
rm -rf /home/user/backup/domain1/logs
Run Code Online (Sandbox Code Playgroud)

但我怎样才能更轻松地做到这一点呢?

roa*_*ima 18

您可以使用rsync代替cp. 除了有一个排除选项外,本地到本地副本的基本相同

rsync --archive --exclude /logs /home/user/glassfish/domains/domain1 /home/user/backup
Run Code Online (Sandbox Code Playgroud)

  • “大部分相同”我认为,在处理大量文件时,对于本地副本,“rsync”远远优于“cp”,因为它可以让您重新启动不完整的副本,而不必关心最后复制的文件是否已完全复制,可以进行增量复制,不需要时间戳来逻辑匹配,并且可以为您提供比“cp”更好的进度信息。 (9认同)
  • 还值得一提的是,rsync 有 `--exclude-from`,它允许您将排除/包含列表保存在文件中。非常适合较长的过滤器列表,并且容易防止跨命令输入错误/忘记目录。 (2认同)

Z0O*_*0OM 5

您可以使用该cp命令并排除包含日志的文件夹,!(excluded_folder)如果您不想使用rsynctar

cp -var /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
Run Code Online (Sandbox Code Playgroud)

或者

cp -R /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
Run Code Online (Sandbox Code Playgroud)

如果你想排除更多文件夹,你可以使用|类似的 !(excluded_folder1|excluded_folder2|excluded_folder3)

确保您的 shell 支持扩展模式匹配(例如,启用该extglob选项的 Bash)。

如果你想在 bash 脚本中使用它:

#!/bin/bash
shopt -s extglob
cp -var /home/user/glassfish/domains/domain1/!(/home/user/backup/domain1/logs) /home/user/backup
Run Code Online (Sandbox Code Playgroud)

如果您收到类似错误!": event not found"

检查这个帖子:

什么是“-bash:!”: 未找到事件”