检查excel文件是否具有具有相同修改日期的xml文件计数器部分

时间:2018-04-24 09:41:40

标签: bash shell unix

有没有办法检查目录中是否存在与excel文件具有相同修改日期的xml文件。

实施例。

ls
---
Apr 11 20:18 sample_excel.xls

Apr 11 20:18 sample1.xml
Apr 12 01:13 sample2.xml
Apr 13 14:01 sample2.xml

如何识别sample1.xml与sample_excel.xls具有相同的修改日期?

编辑:如果我的问题不清楚,请道歉。最终。目标是检查文件夹中是否存在与excel文件具有相同修改日期的xml文件。

我正在考虑采用类似下面的方法。

file1=sample_excel.xls
for xml_file in *.xml; do
        if [ $file1 -nt xml_file]; then 
        echo $xml_file
        else
        echo $xml_file
        fi
done

我的问题上面的代码检查file1是否比xml_file更新。我要检查它是否具有相同的修改日期。

2 个答案:

答案 0 :(得分:0)

如果您的文件只包含Apr 11 20:18这样的行,则可以使用以下脚本。

#!/bin/bash
while read line
do
   if grep "$line" sample_excel.xls; then
      echo "Date $line found in file : sample_excel.xls"
   fi 
done < sample1.xml

答案 1 :(得分:0)

怎么样:

#!/bin/bash

# returns the last modifiled date
function mdate() {
    local stat=$(stat "$1" -c %y)
    set -- $stat
    echo "$1"
}

xls="sample_excel.xls"
mdate_xls=$(mdate "$xls")

for file in *xml; do
    mdate_xml=$(mdate "$file")
    if [[ "$mdate_xls" = "$mdate_xml" ]]; then
        echo "$file"
    fi
done

如果您希望将修改时间与精确度进行比较,请尝试:

#!/bin/bash

# returns the last modifiled time from the epoch
function mtime() {
    echo $(stat "$1" -c %Y)
}

# returns abs of difference
function absdiff() {
    local diff=$(($1 - $2))
    if [[ $diff -lt 0 ]]; then
        diff=$((-$diff))
    fi
    echo $diff
}

xls="sample_excel.xls"
mtime_xls=$(mtime "$xls")
TOL=60              # tolerance

for file in *xml; do
    mtime_xml=$(mtime "$file")
    if [[ $(absdiff $mtime_xml $mtime_xls) -lt $TOL ]]; then
        echo "$file"
    fi
done