查找命令搜索模式

3

我有以下4个文件

a_ROLLBACK2to3__test.sql,
a_1to2__test.sql,
a_2to3__test.sql,
a_2to2__test.sql

我希望能够编写一个查找命令来返回文件 a_1to2__test.sqla_2to3__test.sqla_2to2__test.sql,而文件 a_ROLLBACK2to3__test.sql 不应该被包含在搜索结果中。
我的查找命令如下:
find . -name "*_*to*__*.sql"

但是这会返回所有文件,但我不想要a_ROLLBACK2to3__test.sql
基本上,在第一个_之后带有ROLLBACK的文件不应包括在内。
有人能帮我编写符合我的要求的搜索模式吗?
谢谢。
2个回答

5

用grep过滤结果:

find . -name '*_*to*__*.sql' | grep -v ROLLBACK

或与否定符号!一起使用AND子句-a

find . -name '*_*to*__*.sql' -a ! -name '*ROLLBACK*'


3
对于+1 for -a ! -name 'ROLLBACK'`,它比通过管道传递给grep有几个优点。 - that other guy
喜欢-a ! -name '*ROLLBACK*'这个部分。 - R Sahu
1
find 命令中,不需要使用 -a-not 的优先级高于 -and,并且每个测试和操作之间已经有一个隐含的 -a - Reinstate Monica Please
@BroSlow - 很好的观点。不知怎么的,我从来没有想到有一个隐含的-a - Mr. Llama

2
你可以简单地查找下划线后面跟着一个数字:
find . -name '*_[0-9]*to*__*.sql'

或者对于后面没有跟随R的下划线:

find . -name '*_[!R]*to*__*.sql'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接