【问题标题】:Issue with the for loop not working correctlyfor循环无法正常工作的问题
【发布时间】: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

标签: bash shell


【解决方案1】:

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

使用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=%pfile create date=%AFfile 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

【讨论】:

  • 谢谢@Dudi Boy——但我的要求略有不同。每个文件都有不同的时间间隔,据此我必须确定它是旧的还是新的
猜你喜欢
  • 2023-04-11
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2016-01-01
  • 2021-09-26
  • 1970-01-01
相关资源
最近更新 更多