背景
我尝试在bash配置文件中添加一些内容,以查看备份是否过时,如果没有,则进行快速备份。
问题
基本上我试图查看文件是否比任意日期更早。我可以使用
找到最近更新的文件lastbackup=$(ls -t file | head -1)
我可以使用
获取最后修改日期stat -f "%Sm" $lastbackup
但我无法弄清楚如何将该时间与bash函数进行比较,或者如何制作时间戳等。
我发现的所有其他答案似乎都使用了不同支持标志的{mac}版本stat
。寻找任何线索!
答案 0 :(得分:3)
您可以使用自实际日期和最后一个文件更改的纪元以来的秒数,然后根据秒数的差异决定是否需要备份。
这样的事情:(编辑:更改了stat参数以匹配OS X选项)
# today in seconds since the epoch
today=$(date +%s)
# last file change in seconds since the epoch
lastchange=$(stat -f '%m' thefile)
# number of seconds between today and the last change
timedelta=$((today - lastchange))
# decide to do a backup if the timedelta is greater than
# an arbitrary number of second
# ie. 7 days (7d * 24h * 60m * 60s = 604800 seconds)
if [ $timedelta -gt 604800 ]; then
do_backup
elif
答案 1 :(得分:0)
find命令可以很好地完成您正在寻找的内容。假设您希望确保每天都有不超过1天的备份(您登录),这是一个包含两个文件的测试设置,查找语法和您将看到的输出。
# Create a backup directory and cd to it
mkdir backups; cd backups
# Create file, oldfile and set oldfile last mod time to 2 days ago
touch file
touch -a -m -t 201801301147 oldfile
# Find files in this folder with modified time within 1 day ago;
# will only list file
find . -type f -mtime -1
# If you get no returned files from find, you know you need to run
# a backup. You could do this (replace run-backup with your backup command):
lastbackup=$(find . -type f -mtime -1)
if [ -z "$lastbackup" ]; then
run-backup
fi
如果您查看查找联机帮助页,请查看-atime开关,了解您可以使用的其他单位的详细信息(例如小时,分钟)。