我可以为zsh中的文件globbing的每个结果执行命令而不用吗?

时间:2011-10-13 07:24:17

标签: shell foreach zsh glob

我正在搜索离开为文件globbing的每个结果执行当前命令而不构建for循环。我在某个地方看到了这个,但不记得到底在哪里。

(回声只是一个例子,例如它也适用于psql)

示例:

$ touch aaa bbb ccc ddd
$ echo "--- " [a-c]*
---  aaa bbb ccc

期望的输出:

---  aaa
---  bbb
---  ccc

Kown方式:

$ for i in [a-c]*; do echo "--- " $i ; done
---  aaa
---  bbb
---  ccc

可以使用for来完成。但也许有一种方法可以缩短它?也许喜欢在glob周围使用双花括号或其他什么?

感谢。 :)

2 个答案:

答案 0 :(得分:4)

您可能正在寻找zargs,这是一个与xargs具有相同目的的命令,但它是一个更健全的界面。

autoload -U zargs
zargs -n 1 -- * -- mycommand

答案 1 :(得分:2)

如果格式字符串中的占位符多于占位符,则printf命令将隐式循环:

printf -- "--- %s\n"  [a-c]*

要对每个文件执行命令,您需要xargs:我假设您的GNU xargs具有-0选项:

printf "%s\0" [a-c]* | xargs -0 -I FILE echo aa FILE bb

echo xargs命令替换为您需要的任何内容,使用需要文件名的“FILE”占位符。

使用您自己的判断来确定这是否比for-loop更好或更易于维护。