Bash for循环工作不正常的问题

Bash for循环工作不正常的问题,bash,shell,Bash,Shell,我有多个基于文件指示器运行的作业。 我希望构建一个unix脚本,根据文件是否存在于前一天的当前日期来标记作业。 我正在维护一个csv文件,其中包含以下记录和一个间隔列(以小时为单位)。 如果文件的当前时间和修改时间(以小时为单位)的差异大于csv文件中的时间,则该文件将被标记为旧文件 -sh-4.2$ cat scorecard_file_details.csv Scorecard_Name,Path,FileName,Time_Interval_HRS Scorecard_LDO_ABC_BT

我有多个基于文件指示器运行的作业。 我希望构建一个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
set-x
CSV_文件_路径=/NAS/Target/DQ
**文件名为$(cat scorecard_file_details.csv | awk-F“,“{print$3}”);做
echo$Filename**
CURTIME=$(日期+%s)
File_Path=`awk'{print$2}'`$FileName
cd$文件路径
文件_in_Path=`ls-ltr | awk'{print$9}'`
对于$files\u路径中的文件;做
如果[[“$Files\u in_Path”=$FileName]];然后
TIMEDIFF=echo$(($(日期+%s)-(stat$文件-c%Y))/3600))
echo$files“,“$TIMEDIFF>>/NAS/Target/DQ/file_with_difference.txt
其他的
echo“文件不存在”
fi
完成
完成
集合+x

我强烈建议您重新设计脚本,使用带有
-printf
格式选项的
find
命令以及
-mtime |-ctime |-mmin |-cmin
过滤器的组合

使用
find
命令,您可以过滤时间差、类型、名称、路径等的组合。还对找到的文件分配操作

请阅读简介教程。和详细的手册页

简而言之,您可以将时差计算推送到
find
命令中,然后对找到的文件进行操作

例如:

$ find /tmp -mmin +60 -and -mmin -150   -printf "%p %AF %AT \n"
/tmp
文件夹中查找文件

-mmin+60-和-mmin-150
在60分钟前修改,在150分钟前修改

将找到的文件打印为
文件路径
=
%p
文件创建日期
=
%AF
文件创建时间
=
%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

我不会解析文件_in_Path=
ls-ltr | awk'{print$9}'中ls的输出
而是使用find with printf%Ts,这样您就不需要进一步使用stat.eitherThanks@Dudi Boy了——但我在这里的要求略有不同。每个文件都有不同的时间间隔,在此基础上我必须确定它是旧的还是新的