我正在编写一个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脚本。
答案 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
:保持文件名格式