我想逃跑
find ./ -name "*.xyz" -o -name "*.abc" -exec cp {} /path/i/want/to/copy/to
实际上,这是一个更大的名字扩展列表,但我不知道这对这个例子有什么影响.基本上我想把所有找到的都复制到另一个/path/I/want/to/copy/to.然而,它似乎只是在执行列表中的姓氏测试.
如果删除-exec部分,我希望找到的所有文件变体都会打印出来.
如何让它将找到的全部文件传递给-exec?
我想逃跑
find ./ -name "*.xyz" -o -name "*.abc" -exec cp {} /path/i/want/to/copy/to
实际上,这是一个更大的名字扩展列表,但我不知道这对这个例子有什么影响.基本上我想把所有找到的都复制到另一个/path/I/want/to/copy/to.然而,它似乎只是在执行列表中的姓氏测试.
如果删除-exec部分,我希望找到的所有文件变体都会打印出来.
如何让它将找到的全部文件传递给-exec?
find
通过计算你给出的表达式,直到它可以确定整个表达式的真值(真或假).在你的例子中,你基本上是在做下面的事情,因为默认情况下,它会把表达式放在一起.
-name "*.xyz" OR ( -name "*.abc" AND -exec ... )
参考手册:
GNU查找搜索
这意味着,如果名称匹配*.xyz
,它甚至不会try 判断后一个-name
测试或-exec
,因为它已经是真的.
你要做的是强制优先,你可以用括号来做.令人恼火的是,您还需要使用反斜杠在shell上避开它们:
find ./ \( -name "*.xyz" -o -name "*.abc" \) -exec cp {} /path/i/want/to/copy/to \;