如何确定最近是否使用bash on mac修改了文件

时间:2018-02-02 04:23:34

标签: bash macos shell terminal

背景

我尝试在bash配置文件中添加一些内容,以查看备份是否过时,如果没有,则进行快速备份。

问题

基本上我试图查看文件是否比任意日期更早。我可以使用

找到最近更新的文件
lastbackup=$(ls -t file | head -1) 

我可以使用

获取最后修改日期
stat -f "%Sm" $lastbackup

但我无法弄清楚如何将该时间与bash函数进行比较,或者如何制作时间戳等。

我发现的所有其他答案似乎都使​​用了不同支持标志的{mac}版本stat。寻找任何线索!

2 个答案:

答案 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开关,了解您可以使用的其他单位的详细信息(例如小时,分钟)。