我正在搜索离开为文件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周围使用双花括号或其他什么?
感谢。 :)
答案 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更好或更易于维护。