查找 - 或不打印所有结果

查找 - 或不打印所有结果

包含这些文件的目录:

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(或-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 使用?

答案1

您需要对 or-ed 表达式进行分组,以便它们作为一个组具有与后面的 and-ed 表达式相同的优先级:

find \( -name '*txt' -or -name '*text' \) -print

相关内容