Exec 允许我们一次性传递所有参数,{} +或者使用{} \;
现在假设我想重命名所有jpeg,这样做没问题:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要重定向输出,'{}'则重定向后无法访问。
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Run Code Online (Sandbox Code Playgroud)
这行不通。我必须使用 for 循环,在使用之前将 find 的输出存储到变量中。让我们承认,这很麻烦。
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Run Code Online (Sandbox Code Playgroud)
那么有没有更好的办法呢?