Я пытаюсь добавить функцию оболочки (zsh) mexec
для выполнения той же команды во всех непосредственных подкаталогах, например. со следующей структуройВыполнение команды во всех ближайших подкаталогах
~
-- folder1
-- folder2
mexec pwd
показать бы, например
/home/me/folder1
/home/me/folder2
Я использую find
тянуть непосредственные подкаталоги. Проблема заключается в том, что команда передается в команде. Вот моя первая функция Defintion:
mexec() {
find . -mindepth 1 -maxdepth 1 -type d | xargs -I'{}' \
/bin/zsh -c "cd {} && [email protected];";
}
выполняет только саму команду, но не проходит в аргументах, т.е. mexec ls -al
ведет себя так же, как ls
Изменение второй строки в /bin/zsh -c "(cd {} && [email protected]);"
, mexec
работы для всего mexec ls
но показывает эта ошибка для mexec ls -al
:
zsh:1: parse error near `ls'
Идя EXEC маршрут с найти
find . -mindepth 1 -maxdepth 1 -type d -exec /bin/zsh -c "(cd {} && [email protected])" \;
Дает мне то же самое, что заставляет меня думать, что есть проблема с тем, как я передаю аргументы zsh. Это также, как представляется, проблема, если я использую Баш: приведенная ошибка:
-a);: -c: line 1: syntax error: unexpected end of file
Что бы быть хорошим способом для достижения этой цели?
'ls -al' в этом случае является лишь примерной командой, которую я запускаю в каждом подкаталоге. Я бы хотел, чтобы это была свободная форма, независимо от того, какую команду я использую. Я попробую цикл for. – Zahymaka
@ Zahymaka: Я добавил более общий способ сделать это, добавив функцию. Не забывайте принимать/повышать его, как только вы находите решение проблемы. – Inian
Эта функция не работает, если в названии каталога есть цитата (zsh: 1: unmatched ') – wilsotc