我有一个脚本可以自动备份我的 xubuntu 12.04LTS 工作站的每小时快照。它会创建一个根据日期和时间命名的目录,即:20140316-1033,代表今天上午 10:33,即 3 月 16 日。备份工作完美无缺,硬链接正常运行。
两天前情况发生了变化。我一直手动运行它 - 偶尔,最后我决定让 cron 自动执行该任务,每小时运行一次。我更改了脚本中的详细程度,对每次备份要复制的内容进行了一些调整。所以,我显然改变了一些东西,但我不知道我做了什么。
当我检查目标目录的创建日期时,它始终是 2014 年 3 月 14 日 11:23。在我开始摆弄之前,它运行正常。从那时起,创建日期都是静态的。
因此,我不得不更改脚本,以便它使用目录名称而不是目录的创建日期来确定快照的最新快照。
如果您能提供任何建议,我将不胜感激。提前致谢。
SOURCE="/"
NOW=$(date +"%Y%m%d-%H%M")
BASE="/media/backup-internal/furgesson"
PREVIOUS=$(ls -r $BASE | head -1)
if [[ "$NOW" != "$PREVIOUS" ]];
then
TARGET="$BASE/$NOW"
LINK="$BASE/$PREVIOUS"
OPTIONS="-avH --delete --link-dest=$LINK"
rsync $OPTIONS --include-from '/home/carolyn/BackupScripts/include-list.txt' --exclude-from '/home/carolyn/BackupScripts/exclude-list.txt' $SOURCE $TARGET
fi
目录列表如下所示...
total 124
drwxr-xr-x 25 root root 4096 Mar 7 04:04 20140314-0445
drwxr-xr-x 25 root root 4096 Mar 14 04:48 20140314-0512
drwxr-xr-x 25 root root 4096 Mar 14 04:48 20140314-0515
drwxr-xr-x 25 root root 4096 Mar 14 04:48 20140314-0821
drwxr-xr-x 25 root root 4096 Mar 14 04:48 20140314-0822
drwxr-xr-x 23 root root 4096 Mar 14 09:38 20140314-1013
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-1140
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-1314
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-2059
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-2128
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-2141
drwxr-xr-x 23 root root 4096 Mar 14 11:23 20140314-2144
drwxr-xr-x 3 root root 4096 Mar 14 11:23 20140315-0846
drwxr-xr-x 3 root root 4096 Mar 14 11:23 20140315-0848
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-0849
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-0856
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1125
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1135
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1138
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1405
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1409
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1433
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1533
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1633
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1733
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1833
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140315-1933
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140316-0733
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140316-0833
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140316-0933
drwxr-xr-x 4 root root 4096 Mar 14 11:23 20140316-1033
答案1
一些小问题:
你永远不应该解析
ls
也就是说,在这种情况下,您似乎可以完全控制目标目录中的文件名,因此ls
可以将其作为一个选项。但是,我建议您ls -tr
按时间排序,而不是按字母顺序排序:PREVIOUS=$(ls -tr $BASE | head -n 1)
让我们看看您的
rsync
选择。equals-a
:-rlptgoD
-r, --recursive recurse into directories -l, --links copy symlinks as symlinks -o, --owner preserve owner (super-user only) -g, --group preserve group -t, --times preserve modification times
问题是
-t
,这会保留源文件的实际修改时间,因此它实际上不会将备份的修改日期设置为创建备份的时间,而是设置为原始文件的最后修改时间。替换-a
为-rlog
(删除-t
)以将时间设置为您期望的时间。