每 5 小时将 crontab 更新到 tar new/updated 个文件
Update a crontab to tar new/updated files every 5 hours
我正在尝试为每个 new/updated 个文件(从 cron 最后一个 运行 开始)为 tar 创建一个 crontab 命令。 cron 必须 运行 每 5 小时一次。
- 我想备份文件夹
/home/swayraines
中包含的所有文件,包括其子文件夹
- 我想将这些文件保存到 tar
folder/backup/back.tar
- crontab 必须 运行 每 5 小时
- 只有自上次 执行 cron 后 添加或编辑的文件需要添加到存档中。所以除非它是 new/edited,否则不应保存。
- 我想将结果保存在日志中,这里同时包含 stdout 和 stderr
folder/backup/backlog.log
所以我认为最好的方法是 find
过去 5 小时内的文件 added/edited,然后 tar
这些文件,然后再输出 stdout 和 stderr .log 但它不起作用,我不确定出了什么问题。
目前情况如下(已更新以包含部分答案):
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
更新
问题是现在它会在每次 crontab 运行 时创建一个新的 tar 存档,并且存档只包含最新添加的文件。
更新 2
明确地说,我一开始说我想每 5 小时创建一个新档案,但我想更新档案并仅附加新文件。所以我认为我需要将 tar 命令更改为 -uvf
?
使用有符号 数字作为参数。 300 表示 正好 300 分钟前修改。 -300 比 300 分钟前少。 +300 比 300 分钟前多 。
更新 1
-exec
的参数必须以 \;
结尾,像这样:
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
这将 运行 没有问题,但由于它一次对 1 个文件执行命令,您最终只会将它操作的最后一个文件压缩到 tar 文件。我建议你写命令将文件复制到临时目录,压缩临时目录,然后删除临时目录。
更新 2
正确。如果要将更改的文件附加到 tar 文件的末尾,可以使用 -r --append
或 -u --update
,但是 tar 文件必须首先创建。如果文件不存在,它将不会创建该文件。重要的是要注意这些命令不会覆盖以前的版本,因此如果您不需要两个版本,您应该先使用 --delete
然后附加新版本。
另请注意,这不是压缩的 tar 文件。没有 un/re-compressing,您无法更新压缩的 tar 文件。这就是为什么不能组合 -z
和 -ur
选项的原因。
我正在尝试为每个 new/updated 个文件(从 cron 最后一个 运行 开始)为 tar 创建一个 crontab 命令。 cron 必须 运行 每 5 小时一次。
- 我想备份文件夹
/home/swayraines
中包含的所有文件,包括其子文件夹 - 我想将这些文件保存到 tar
folder/backup/back.tar
- crontab 必须 运行 每 5 小时
- 只有自上次 执行 cron 后 添加或编辑的文件需要添加到存档中。所以除非它是 new/edited,否则不应保存。
- 我想将结果保存在日志中,这里同时包含 stdout 和 stderr
folder/backup/backlog.log
所以我认为最好的方法是 find
过去 5 小时内的文件 added/edited,然后 tar
这些文件,然后再输出 stdout 和 stderr .log 但它不起作用,我不确定出了什么问题。
目前情况如下(已更新以包含部分答案):
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
更新 问题是现在它会在每次 crontab 运行 时创建一个新的 tar 存档,并且存档只包含最新添加的文件。
更新 2
明确地说,我一开始说我想每 5 小时创建一个新档案,但我想更新档案并仅附加新文件。所以我认为我需要将 tar 命令更改为 -uvf
?
使用有符号 数字作为参数。 300 表示 正好 300 分钟前修改。 -300 比 300 分钟前少。 +300 比 300 分钟前多 。
更新 1
-exec
的参数必须以 \;
结尾,像这样:
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
这将 运行 没有问题,但由于它一次对 1 个文件执行命令,您最终只会将它操作的最后一个文件压缩到 tar 文件。我建议你写命令将文件复制到临时目录,压缩临时目录,然后删除临时目录。
更新 2
正确。如果要将更改的文件附加到 tar 文件的末尾,可以使用 -r --append
或 -u --update
,但是 tar 文件必须首先创建。如果文件不存在,它将不会创建该文件。重要的是要注意这些命令不会覆盖以前的版本,因此如果您不需要两个版本,您应该先使用 --delete
然后附加新版本。
另请注意,这不是压缩的 tar 文件。没有 un/re-compressing,您无法更新压缩的 tar 文件。这就是为什么不能组合 -z
和 -ur
选项的原因。