bash find:路径更改结果使用正则表达式排除

时间:2012-04-24 08:11:05

标签: bash find

我想使用正则表达式排除find报告的文件。但是,如果要查找的路径参数是a,这似乎只能起作用。 (点)。一旦我指定路径,find就不会返回任何内容。

文件夹中的2个文件:

~/xtmp/testfind> ls
test1.tmp.txt   test1.txt

通过将路径指定为。

来获得预期结果
~/xtmp/testfind> find . -regex '.*txt.*' ! -regex '.*tmp.*' 
./test1.txt

使用$ PWD它找不到任何东西:

~/xtmp/testfind> find $PWD -regex '.*txt.*' ! -regex '.*tmp.*' 
~/xtmp/testfind>
放弃了!正则表达式找到了所有东西,所以$ PWD是正确的:

~/xtmp/testfind> find $PWD -regex '.*txt.*' 
[...]/xtmp/testfind/test1.tmp.txt
[...]/xtmp/testfind/test1.txt

1 个答案:

答案 0 :(得分:1)

您的路径包含字符串tmp/xtmp/),因此排除! -regex '.*tmp.*'始终匹配。正则表达式很难正确地进行这种负匹配;但在这种情况下,您可能希望使用glob和-name(仅匹配最终路径名组件,而不是通向它的路径)。

find $PWD -name '*txt*' ! -name '*tmp*'