使用正则表达式过滤搜索文件

时间:2016-04-27 07:40:06

标签: regex bash unix

在Bash中,我使用数组来存储我想通过正则表达式复制的文件。像这样:

regex_2=(*.awk *.sh *utf8.txt *new.txt)
cp "${regex_2[@]}" $root_dest_dir_2

但是从扩展名为.sh的文件中我想排除那些以这样结尾的文件:

*2016025a.sh *2015039.sh *20150810b.sh

因此排除,以.sh结尾的那些以字母和多个数字开头,或以.sh结尾,前面有多个数字。

该目录包含以下文件:

dev_execute_fromFTP5.sh --> to copy
dev_execute_fromFTP5_2016025a.sh -- to exclude
extrac.sh --> to copy
execute_fromFTP5NT.sh --> to copy
execute_fromFTP5NT_20150226.sh --> to exclude
test5.sh --> to copy
.....

1 个答案:

答案 0 :(得分:1)

您可以使用gnu find with regex

find . -regextype egrep \
       -regex ".*\.(awk|sh|utf8\.txt|new.txt)" \
       ! -regex ".*([0-9][[:alnum:]]).sh" \
       -exec cp {} $root_dest_dir_2 +