2015-02-09 93 views
1

我要寻找一个简单的bash解决方案来执行一个文件时像wget --timestamp https://example.com/my.file如何仅在通过wget或curl下载较新的文件时才执行操作?

命令后更新我观察到,wget的两个案例返回0,当文件已经是最新版本,并且还当它做了一个动作下载一个更新的。

什么是在bash实现这个最简单的方法是什么?

+2

另存为不同的文件,然后对它们进行比较,如果它们是不同的,那么做什么 – 2015-02-09 10:43:50

+2

@JID我宁愿保存在变量文件的日期时间运行wget和执行后检查它。我不想将新文件添加到磁盘,因为没有任何理由。 – sorin 2015-02-09 11:47:51

+2

我不会说没有理由,因为它可以解决您的问题。根据文件的大小,它可能会在磁盘上少于几秒钟。你也可以使用'-qO-'并比较这个产生的stdout与原始文件。或者你可以像你说的那样把日期时间保存到一个变量中,尽管我不知道这个问题的重点是什么。 – 2015-02-09 11:54:49

回答

2

在执行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

+0

伟大的workarround ...附注:这将产生'[:太多参数'错误。 (stat时间戳有空格)。使用双方括号或双引号...请参阅http://stackoverflow.com/a/13781217/1601332 – gmo 2017-02-14 11:52:41

+1

感谢您的评论,我相应地修改了我的答案。 – 2017-02-14 15:15:11

相关问题