使用基于子字符串的条件在Shell脚本中查找文件

时间:2019-01-29 18:37:25

标签: bash shell find sh

我正在编写一个shell脚本,以基于共享标识符将不同的文件匹配在一起。该标识符是日期,格式为:MMDDYY。例如,将在2018年1月5日创建一个名称为010518id.xml的文件。我只需要它来查找2013年之后创建的文件。

我当前在shell脚本中有这一行:

nfiles=$(find $SEARCH_DIR -name $fileName'*.xml' -type f)

我正在考虑通过调用fileYear = ${fileName:3:2},然后使用if[ ${#fileYear} -gt 13 ],然后在该语句中嵌套一个语句来检查年份,以检查nfiles的数量是否超过一定数量。

这是最好的方法吗?一个或两个命令中可能有某种方法可以做到这一点,但这是我必须编写的第一个Shell脚本。

1 个答案:

答案 0 :(得分:1)

因为您说过:

  

我需要它仅查找2013年之后创建的文件。

并且2013年一直持续到12月31日,我假设从2014年1月1日到今天的任何文件,因此:

测试文件:

$ ls -1 *.xml
010313id.xml
010518id.xml
011012id.xml

输出:

$ find . -regextype egrep -regex .*[0-9]{4}1[4-9]id.*
./010518id.xml

说明:

  

-regextype egrep:将egrep定义为要理解的regexp语法

     

-regex:声明我将使用正则表达式,即:

     

.*:任意字符零次或多次,后跟:

     

[0-9]{4}:任意四位数字,后跟:

     

1:第一位,后跟:

     

[4-9] 4到9之间的任意数字(模拟2014年至今)

     

id:保持文件名格式