for循环的问题无法正常工作

时间:2020-11-12 07:54:12

标签: bash shell

我有多个基于文件指示器运行的作业。 我正在寻找一个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

1 个答案:

答案 0 :(得分:0)

我强烈建议您重新设计脚本,以将find命令与-printf格式选项结合使用,并结合使用-mtime | -ctime | -mmin | -cmin过滤器。

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

请阅读入门教程here。以及详细的手册页here

简而言之,您可以将时差计算推入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