包含这些文件的目录:
irrelevant irrelevant.doc dok1.txt dok2.text dok3.txt dok4.text
我需要找到所有 *txt 和 *text 文件并对它们进行一些转换。
find
命令和结果:
$ find -name '*txt' -or -name '*text'
./dok2.text
./dok4.text
./dok3.txt
./dok1.txt
这是我需要的理想结果,将这四个文件传递给-exec
.
不幸的find
是-print
(or -exec echo {} +
) 产生:
$ find -name '*txt' -or -name '*text' -print
./dok2.text
./dok4.text
显然是 find 的这种情况(来自 find 手册页):
NON-BUGS
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print afile
because this is actually equivalent to find . -name afile -o \( -name bfile
-a -print \). Remember that the precedence of -a is higher than that of -o
and when there is no operator specified between tests, -a is assumed.
应该如何给出 find 命令以使所有四个文件都可用于 -exec?
您需要对 or-ed 表达式进行分组,以便它们作为一个组与后面的 and-ed 表达式具有相同的优先级: