用于验证文件名的Shell脚本

时间:2015-06-22 08:18:31

标签: unix sh data-warehouse informatica

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

filename_22 / 06 / 2015_ready.csv - 应忽略此文件 filename_21 / 06 / 2015_ready.csv - 此文件应由ETL处理

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

2 个答案:

答案 0 :(得分:0)

最好使用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 {} +

答案 1 :(得分:0)

尝试以下方法:

#!/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

使用此脚本并根据您的要求进行更改我也提供了注释和调试代码。

在上面的代码中添加命令,在昨天的情况下将昨日文件发送到ETL。 我已经考虑过ddmmyyy格式的日期,请相应更改文件名。