编辑时备份文件并为其添加时间戳?

编辑时备份文件并为其添加时间戳?

每次文件更改时,我都想将特定文件备份到另一个文件夹中。理想情况下,备份文件在备份时应带有时间戳。例如:

目录工作文件

~/workfile

目录备份文件

~/backup/workfile-2014-11-24-10:30
~/backup/workfile-2014-11-24-11:10
~/backup/workfile-2014-11-24-12:40
~/backup/workfile-2014-11-24-15:42
~/backup/workfile-2014-11-24-16:30

我希望有一个不使用 GUI 的解决方案。

答案1

我不太清楚这里的用例是什么。但是,与其根据特定时间戳对文件进行“备份”,不如只存储版本之间的更改,不是更好吗?!

如果你的文件是非二进制的,比如文本或源代码,使用git

如果它们是二进制的,我会使用 rsnapshot,因为它会自动创建一个包含每个文件版本的并行文件夹结构,但只保留实际有更改的文件的副本(节省空间)

根据快照的时间将其保存在文件夹中。例如 day2/hour3

将日期存储在文件名本身中似乎是多余的。rsnapshot 通过它为备份创建的文件夹结构保留该信息,您也可以在文件本身的日期上看到它。

GIT 将向您显示每个文件提交的每个更改的提交日期。

答案2

未经测试,但我会以这种方式解决问题:

剧本:

#!/bin/bash
BACKUP_LOCATION='backup'
FILE_TO_MONITOR='workfile'
PREVIOUS_MD5='000'

if [ ! -d "$BACKUP_LOCATION" ]
then
    mkdir -p "$BACKUP_LOCATION"
    echo "Init backup dir..."
fi

while true
do
MY_TIMESTAMP=`date +"%Y-%m-%d-%H:%M:%S"`
MY_MD5=`md5sum "$FILE_TO_MONITOR"`
if [ "$MY_MD5" != "$PREVIOUS_MD5" ]
    then
    cp -f "$FILE_TO_MONITOR" "${BACKUP_LOCATION}/${FILE_TO_MONITOR}-${MY_TIMESTAMP}"
    PREVIOUS_MD5=$MY_MD5
    echo "File changed at $MY_TIMESTAMP."
    fi
done

程序:将此脚本作为守护进程运行。您甚至可以将输出重定向到日志文件。

答案3

在我看来玉米工作是比无限循环更好的替代方案。我假设~/backup文件夹已经存在。可以设置玉米工作n根据需要每隔几分钟运行以下脚本。它将达到目的。

每隔 5 分钟运行一次脚本

从终端打开用户的 crontab(cron 配置文件),crontab -e添加以下行以每 5 分钟运行一次脚本,

*/5 * * * * /path/to/script

不要忘记赋予脚本执行权限chmod u+x /path/to/script

剧本

#!/bin/bash
msrc="/home/$USER"
mdst="/home/$USER/backup"
msrcfile="workfile"
mnewfile="$msrcfile"-$(date +"%Y-%m-%d-%H:%M")
checkfile="$(for i in "$mdst"/*; do echo "$i"; done | xargs ls -1t > /dev/null 2>&1 | head -1)"

if [[ "$msrc"/"$msrcfile" -nt "$checkfile" ]]; then
    cp "$msrc"/"$msrcfile" "$mdst"/"$mnewfile"
fi

man bash

CONDITIONAL EXPRESSIONS
file1 -nt file2
          True if file1 is newer (according to modification date) than file2, or if  file1
          exists and file2 does not.

man ls

-t     sort by modification time, newest first

相关内容