Мое избранное:
UNIX is basically a simple operating system, but you have to be a genius to
understand the simplicity.
Dennis Ritchie
И:
One of my most productive days was throwing away 1000 lines of code.
Ken Thomson
Я думаю, что Вы действительно хотите, что-то вроде этого:
% zmv '(**/)(*).erb' '$1/$2.haml'
# ^$1 ^$2
Необходимо использовать круглую скобку для создания групп соответствия, и Вы создаете группу соответствия для пути к файлу и затем группу соответствия для имени файла. Кроме того, необходимо удостовериться, что второй аргумент находится также в одинарных кавычках для zmv.
Кроме того, это - действительно хорошая идея протестировать команды zmv с '-n' перед выполнением их (-n, скажет Вам, что будет переименовано, но не на самом деле переименует что-либо.)
Необходимо сказать zsh
что $1
относится к. Существует две возможности:
Используйте круглые скобки вокруг частей исходного шаблона, который Вы хотите использовать. Например, в zmv '(*)/(*).erb' '$1/$2.haml'
, '1$' означает то, что подобрано первым *
и $2
средства, что подобрано вторым $2
.
[РЕДАКТИРОВАНИЕ (благодаря clee для указания на это (**/)
работы)] Круглые скобки немного неудобно использовать с несколькими уровнями каталога. Если Вы пишете (**)
, двойная звездочка теряет свое особое значение (только единственный уровень каталога подобран). И Вы главным образом не можете использовать /
в круглых скобках, таким образом, (**/*)
не допустимый шаблон. Однако особый случай (**/)
работы, таким образом, можно записать zmv '(**/)(*).erb' '$1$2.haml'
.
Используйте -w
опция, в этом случае каждый $N
соответствует тексту, подобранному Энным подстановочным знаком в исходном шаблоне. Например, zmv -w '**/*.erb' '$1/$2.haml'
делает то, что Вы хотите.
Обратите внимание, что необходимо всегда использовать одинарные кавычки вокруг текста замены (или использование \$
), иначе $
s расширены оболочкой, прежде чем они доберутся до zmv
встроенная команда.
(**)/
соответствия точно один уровень каталога, т.е.**
теряет его особое значение и эквивалентен*
. Так эта команда работы, но не имеет подразумеваемого смысла. – Gilles 'SO- stop being evil' 22.08.2010, 13:16