【发布时间】:2021-02-24 05:16:10
【问题描述】:
我有多个基于文件指示器运行的作业。 我正在寻找构建一个 unix 脚本来根据文件是否存在于前一天的当前日期来标记作业。 我正在维护一个 csv 文件,其中包含以下记录和一个间隔列(以小时为单位)。 如果当前时间和文件的修改时间(以小时为单位)的差异大于 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 的文件名与其对应路径的文件名匹配,并获取数据可能在另一个文件中(文件名、路径、标志)。
我想出了下面的脚本,但它目前在突出显示的(粗体)步骤中没有返回任何内容(到目前为止它还不完整)。
任何人都可以帮忙,为什么尽管猫工作正常,但下面的 for 没有返回任何东西? 此外,感谢您对逻辑的任何帮助。
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
【问题讨论】:
-
我不会在 Files_in_Path=
ls -ltr | awk '{ print $9 }'中解析 ls 的输出,而是使用 find 和 printf %Ts 这样你就不需要进一步使用 stat.either