我有多个基于文件指示器运行的作业。 我正在寻找一个unix脚本来基于文件是否存在于前一天的当前日期来标记作业。 我正在维护一个csv文件,其中包含以下记录和一个Interval列(以小时为单位)。 如果当前时间与文件修改时间(以小时为单位)之间的差值大于csv文件中的值,那么它将被标记为旧文件。
-sh-4.2$ cat scorecard_file_details.csv
Scorecard_Name,Path,FileName,Time_Interval_HRS
Scorecard_LDO_ABC_BTS,/NAS/IDQ/Bank_SEN,ABC.EXT,12
Scorecard_LDO_PQR_BTS,/NAS/IDQ/Bank_Prof,PQR.EXT,6
文件位于不同的路径,即上述csv文件中的路径。 现在,我想将csv的文件名与相应路径下的文件名匹配,并获取数据可能在另一个文件中(文件名,路径,标志)。
我想出了以下脚本,但当前在突出显示的(粗体)步骤中未返回任何内容(目前尚不完整)。
任何人都可以帮忙,尽管猫工作正常,但为什么以下原因不归还任何东西? 另外,感谢您对逻辑的任何帮助。
set -x
CSV_File_Path=/NAS/Target/DQ
**for FileName in $(cat scorecard_file_details.csv | awk -F "," '{ print $3 }'); do
echo $Filename**
CURTIME=$(date +%s)
File_Path=`awk '{ print $2 }'` $FileName
cd $File_Path
Files_in_Path=`ls -ltr | awk '{ print $9 }'`
for files in $Files_in_Path ; do
if [[ "$Files_in_Path" = $FileName ]]; then
TIMEDIFF=echo $(( ($(date +%s) - $(stat $files -c %Y)) / 3600 ))
echo $files","$TIMEDIFF >> /NAS/Target/DQ/file_with_difference.txt
else
echo "File is not present"
fi
done
<<Logic to flag based on time difference and interval>>
done
set +x
答案 0 :(得分:0)
我强烈建议您重新设计脚本,以将find
命令与-printf
格式选项结合使用,并结合使用-mtime | -ctime | -mmin | -cmin
过滤器。
使用find
命令可以过滤时差,类型,名称,路径等的组合。还要对找到的文件分配操作。
简而言之,您可以将时差计算推入find
命令中,然后对找到的文件进行操作。
例如:
$ find /tmp -mmin +60 -and -mmin -150 -printf "%p %AF %AT \n"
在/tmp
文件夹中查找文件。
-mmin +60 -and -mmin -150
于60分钟前进行了修改,而少于150分钟前进行了修改。
将找到的文件打印为file path
= %p
file create date
= %AF
file create time
= %AT
输出:
/tmp/Low 2020-11-12 20:16:45.1960274000
/tmp/StructuredQuery.log 2020-11-12 20:55:00.3057165000
/tmp/~DF3465C10364E2CAFE.TMP 2020-11-12 20:16:45.7578495000
/tmp/~DFAC3AC652357DBBED.TMP 2020-11-12 20:16:46.1726618000
/tmp/~DFC2B1A30DCA4CA52A.TMP 2020-11-12 20:16:46.3941610000