【问题标题】:Comparing file created yesterday with file created today比较昨天创建的文件和今天创建的文件
【发布时间】:2020-09-25 14:55:12
【问题描述】:

我的目录中有如下格式的文件。

$today 和 $yesterday 是两个变量,分别保存今天的日期和昨天的日期,两者都将保存日期,如下面的结构所示​​。
今天=$(日期 +"%Y-%m-%d")
昨天=$(date -d "昨天 13:00" '+%Y-%m-%d')

example-$today.txt
polar-$today.txt
example-$yesteday.txt
polar-$yesteday.txt

昨天的例子:example-2020-09-24.txt
今天的例子:example-2020-09-25.txt

文件是使用 cronjob 每天创建的,所以下面的结构中会有明天日期的文件。

example-$tomorrow.txt
polar-$tomorrow.txt

我想比较在不同日期以相同名称开头的文件,如果有差异,则执行 python 脚本。如果有差异,python 脚本将今天的文件作为第一个参数。

if diff example-$today.txt example-$yesteday.txt
then 
echo "No difference"
else
python script.py example-$today.txt
fi

如果我只有 2 或 3 个文件,我可以使用上面提到的使用 diff 的每个文件的 if else 代码,但列表将在未来填充更多唯一名称,并且编写 if 命令很乏味。

要求:

比较昨天和今天目录下所有同名文件名的txt文件,如果有差异则执行python脚本。

【问题讨论】:

  • 缺一天怎么办?你想让脚本做什么?如果缺少 02,则将 2020-01-01 与 2020-01-03 进行比较,或者什么都不做?
  • 请写一个确切的文件名示例。是 example-2020-01-01.txt 吗?还有什么?
  • @thanasisp 我已经用确切的文件名示例更新了问题
  • nice,请查看第一条评论,如果发现差距怎么办?
  • 我想比较 2020-01-01 和 2020-01-02 ,肯定会有 2020-01-02 。每天都会创建文件,不会缺少日期。

标签: linux bash shell


【解决方案1】:

看起来这可能并不太可怕:

for base in example polar; do
    if ! diff ${base}-$today.txt ${base}-$yesteday.txt; then    
        python script.py ${base}-$today.txt
    fi
done

这应该是相当可维护的,您可以编写list='example polar ...' ... for base in $list,或list=$( cmd to dynamically generate names),或使用数组。有很大的灵活性。例如,如果您不想维护文件列表,您可以这样做:

for file in *-${today}.txt; do 
    base="${file%-${today}.txt}"
    if ! diff "${base}-$today.txt" "${base}-$yesteday.txt"; then    
        python script.py "${base}-$today.txt"
    fi
done

请注意,我已经删除了多余的冗长。悄悄地成功,大声地失败。

【讨论】:

  • 紧凑型解决方案
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多