我搜索SO以寻找可能给我这个简单答案的内容,它似乎是here和here(在众多中),但我根本无法让它起作用。
我有像
这样的文件12_pattern1.yyy_zzz #find
13_pattern1.xxx.pattern2_xx
12_yy_pattern1:xxx
14_pattern1.xxx_pattern2.xxx #find
12_xxx_zzz.yyy.xxx
14_pattern1.xxx.yyy #find
我需要找到并删除以12
或14
开头的文件,此后立即生成_pattern1
,不要以pattern2
结尾。
我尝试了find . -regex ".*/\(12_\|14_\)pattern1.*[^pattern2$]" -exec rm -f {} \;
我在这里缺少什么?
答案 0 :(得分:3)
这样的事情怎么样:
find . -regex "^\(12_\|14_\)pattern1.*" -not -regex "*.pattern2$"
答案 1 :(得分:1)
find
命令支持正则表达式的posix-*
种风格。这意味着您无法使用find
进行此操作。但是,如果您可以使用grep
,那么您可以轻松地执行此操作(但需要两个工具的帮助):
find . | grep -P '(14|12)_pattern1[^/]*$(?<!pattern2)'