我想使用正则表达式排除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
答案 0 :(得分:1)
您的路径包含字符串tmp
(/xtmp/
),因此排除! -regex '.*tmp.*'
始终匹配。正则表达式很难正确地进行这种负匹配;但在这种情况下,您可能希望使用glob和-name
(仅匹配最终路径名组件,而不是通向它的路径)。
find $PWD -name '*txt*' ! -name '*tmp*'