用于验证文件名的 Shell 脚本

Posted

技术标签:

【中文标题】用于验证文件名的 Shell 脚本【英文标题】:Shell Script to Validate Filename 【发布时间】:2015-06-22 08:18:30 【问题描述】:

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

filename_22/06/2015_ready.csv – 这个文件应该被忽略 filename_21/06/2015_ready.csv – 这个文件应该由 ETL 处理

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

您好,谢谢您的回复。我试过'找到 . -type f -mmin +1 -exec ls +' 这给了我所有的文件,包括今天的文件。在表达式中找到 . -type f -mtime +1 -exec ls -halt +' 我收到没有这样的文件或目录的错误。 mmh, ok: from man find: 当找出最后一次访问文件是多少个 24 小时前,任何小数部分都会被忽略,所以要匹配 -atime +1 , 文件必须至少在两天前被访问过。 .这意味着您应该将-mmin +$((60*24)) 用于最后一天的文件。【参考方案2】:

尝试以下方法:

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

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

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

【讨论】:

以上是关于用于验证文件名的 Shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

用于传递文件名并运行的 shell 脚本 [重复]

用于从文本文件中提取数据的 Shell 脚本

用于查找两个文件之间出现次数增加的 Shell 脚本

用于在远程系统上归档文件的 Unix shell 脚本

如何将shell脚本中定义的变量用于Scala文件? [重复]

用于在文件中添加数据的 shell 脚本 [重复]