Exec允许我们要么与一次传递所有参数,要么与{} +
一对一传递它们{} \;
现在假设我想重命名所有jpeg,这样做没有问题:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
但是,如果我需要重定向输出,'{}'
重定向后将无法访问。
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
这行不通。我必须使用for循环,在使用find之前将其输出存储到变量中。让我们承认,它很麻烦。
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
那有更好的方法吗?
{}
在较长的字符串中出现命令行,因为此类字符串通常不会扩展。
find
一次,然后应用于find
命令本身。该{}
在这方面没有任何特殊含义。重定向不是的参数find
,它当然也不是该-exec
子句的一部分。
>
第三代码示例中是否没有缺少内容?