Могу ли я выполнить команду для каждого результата смещения файла в zsh без for? - PullRequest
5 голосов
/ 13 октября 2011

Я ищу, чтобы выполнить текущую команду для каждого результата поиска файла без создания цикла for. Я где-то видел это, но не могу вспомнить, где именно.

(echo - только пример, он также должен работать, например, с psql)

Пример:

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

Желаемый вывод:

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

Известный способ:

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

Может быть сделано с использованием для. Но, может быть, есть способ сделать это короче? Может быть, как использовать двойные фигурные скобки вокруг шара или что-то еще?

Спасибо. :)

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

Возможно, вы ищете zargs, команду с той же целью, что и у xargs, но более разумный интерфейс.

autoload -U zargs
zargs -n 1 -- * -- mycommand
2 голосов
/ 13 октября 2011

Команда 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.

...