Unix 用于验证文件名的Shell脚本

Unix 用于验证文件名的Shell脚本,unix,sh,data-warehouse,informatica,Unix,Sh,Data Warehouse,Informatica,我需要创建一个脚本来验证文件名。 Informatica作业从源中开始提取这些文件,源中将有两个文件。一个是“正在进行的文件(当前日期:Sysdate)”,另一个是已完成/关闭的文件(前一天:即,文件名与Sysdate-1对齐)。现在ETL必须提取除进行中文件(文件日期小于Sysdate)之外的所有文件。 假设当前日期为“2015年6月22日”-以下是ETL可以在源文件夹中看到的文件列表 文件名\u 22/06/2015\u ready.csv–应忽略此文件 文件名_21/06/2015_rea

我需要创建一个脚本来验证文件名。 Informatica作业从源中开始提取这些文件,源中将有两个文件。一个是“正在进行的文件(当前日期:Sysdate)”,另一个是已完成/关闭的文件(前一天:即,文件名与Sysdate-1对齐)。现在ETL必须提取除进行中文件(文件日期小于Sysdate)之外的所有文件。 假设当前日期为“2015年6月22日”-以下是ETL可以在源文件夹中看到的文件列表

文件名\u 22/06/2015\u ready.csv–应忽略此文件 文件名_21/06/2015_ready.csv–此文件应由ETL处理


请帮助我如何编写shell脚本以满足此要求

最好使用
find
而不是正则表达式读取文件名

此类命令应提供前一天编写的文件:

# print a list of all files older than one day expressed in minutes (60*24) 
find . -type f -mmin +$((60*24)) -exec ls -halt {} +
# print a list of all files older than one day, expressed in multiple of 86400 seconds
find . -type f -mtime +1 -exec ls -halt {} +
请尝试以下操作:

#!/bin/bash
    path="PathToYourFiles";
    `cd $path`
    for i in `ls *.csv`;
     do
            filedate=`echo "$i" |grep -Eo '[[:digit:]]{8}'`
            #echo "Filedate => $filedate";
            today=`date '+%d%m%Y'`;
            yesterday=`date -d "1 day ago" '+%d%m%Y'`;
            case  "$filedate" in
                $today )
                    echo "ignoring file its in progres";
                    ;;
                $yesterday )
                    echo "proces the file";
                    ;;
                *)
                    echo "invalid file to process";
                    ##send it to ETL
                    ;;

                    #echo "today => $today ,yesterday => $yesterday"
            esac
    done
使用此脚本并根据您的要求进行更改我还提供了注释和调试代码

在上面的代码中,在$Dayed case中添加将昨天文件发送到ETL的命令。
我考虑了ddmmyyy格式的日期,请相应地更改文件名。

您好,谢谢您的回复。我试着找-键入f-mmin+1-exec ls{}+',它将提供包含今天的文件在内的所有文件。在表达式“find”中-键入f-mtime+1-exec ls-halt{}+'我没有收到这样的文件或目录的错误。mmh,ok:from
man find
:当find计算出上次访问文件的24小时时间段数时,任何小数部分都会被忽略,因此要匹配-atime+1,文件必须至少在两天前被访问过。这意味着您应该对最后一天的文件使用
-mmin+$((60*24))