小编Buz*_*zut的帖子

find exec '{}' 在 > 之后不可用

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)

那么有没有更好的办法呢?

bash find

8
推荐指数
2
解决办法
1396
查看次数

标签 统计

bash ×1

find ×1