我要寻找一个简单的bash解决方案来执行一个文件时像wget --timestamp https://example.com/my.file
如何仅在通过wget或curl下载较新的文件时才执行操作?
命令后更新我观察到,wget的两个案例返回0,当文件已经是最新版本,并且还当它做了一个动作下载一个更新的。
什么是在bash实现这个最简单的方法是什么?
我要寻找一个简单的bash解决方案来执行一个文件时像wget --timestamp https://example.com/my.file
如何仅在通过wget或curl下载较新的文件时才执行操作?
命令后更新我观察到,wget的两个案例返回0,当文件已经是最新版本,并且还当它做了一个动作下载一个更新的。
什么是在bash实现这个最简单的方法是什么?
在执行wget
之前和之后,您可以使用stat -c %y
来保存上次数据修改的时间戳。然后在两个时间戳不同的情况下运行您的操作。
t1=$(stat -c %y $FILE)
wget https://example.com/$FILE
t2=$(stat -c %y $FILE)
if [ "$t1" != "$t2" ]; then
echo "Do something"
fi
如果您使用的是BSD类似Unix的如MacOS的使用stat -f %m
代替stat -c %y
。
伟大的workarround ...附注:这将产生'[:太多参数'错误。 (stat时间戳有空格)。使用双方括号或双引号...请参阅http://stackoverflow.com/a/13781217/1601332 – gmo 2017-02-14 11:52:41
感谢您的评论,我相应地修改了我的答案。 – 2017-02-14 15:15:11
另存为不同的文件,然后对它们进行比较,如果它们是不同的,那么做什么 – 2015-02-09 10:43:50
@JID我宁愿保存在变量文件的日期时间运行wget和执行后检查它。我不想将新文件添加到磁盘,因为没有任何理由。 – sorin 2015-02-09 11:47:51
我不会说没有理由,因为它可以解决您的问题。根据文件的大小,它可能会在磁盘上少于几秒钟。你也可以使用'-qO-'并比较这个产生的stdout与原始文件。或者你可以像你说的那样把日期时间保存到一个变量中,尽管我不知道这个问题的重点是什么。 – 2015-02-09 11:54:49