zsh: проблемы с переименованием файлов с zmv

Я пытаюсь переименовать файлы с одного расширения на другое (фон: используйте haml вместо erb в моем приложении rails). Я получаю следующий вывод при выдаче команды rename:

% zmv '**/*.erb' $1.haml zmv: error(s) in substitution: app/views/l/links/index.html.erb and app/views/index/index.html.erb both map to .haml app/views/l/links/new.html.erb and app/views/l/links/index.html.erb both map to .haml app/views/l/links/show.html.erb and app/views/l/links/new.html.erb both map to .haml app/views/l/links/stats.html.erb and app/views/l/links/show.html.erb both map to .haml app/views/layouts/application.html.erb and app/views/l/links/stats.html.erb both map to .haml app/views/u/profiles/_form.erb and app/views/layouts/application.html.erb both map to .haml app/views/u/profiles/edit.html.erb and app/views/u/profiles/_form.erb both map to .haml app/views/u/profiles/show.html.erb and app/views/u/profiles/edit.html.erb both map to .haml app/views/u/user_sessions/new.html.erb and app/views/u/profiles/show.html.erb both map to .haml app/views/u/users/_form.erb and app/views/u/user_sessions/new.html.erb both map to .haml app/views/u/users/new.html.erb and app/views/u/users/_form.erb both map to .haml app/views/u/users/show.html.erb and app/views/u/users/new.html.erb both map to .haml 

Может ли кто-нибудь указать мне в правильном направлении, чтобы это исправить?

2 Solutions collect form web for “zsh: проблемы с переименованием файлов с zmv”

Я думаю, что вы действительно хотите что-то вроде этого:

 % zmv '(**/)(*).erb' '$1/$2.haml' # ^$1 ^$2 

Вам нужно использовать скобки для создания групп соответствия, и вы создаете группу соответствия для пути к файлу, а затем группу соответствия для имени файла. Кроме того, вам нужно убедиться, что второй аргумент также находится в одинарных кавычках для zmv.

Кроме того, это действительно хорошая идея, чтобы проверить команды zmv с '-n', прежде чем запускать их (-n скажет вам, что будет переименовано, но на самом деле ничего не переименовать).

Вы должны указать zsh что означает $1 . Есть две возможности:

  • Используйте круглые скобки вокруг частей шаблона источника, который вы хотите использовать. Например, в zmv '(*)/(*).erb' '$1/$2.haml' , '$ 1' означает то, что соответствует первому * а $2 означает то, что соответствует второй $2 .

    [ EDIT (благодаря clee для указания, что (**/) работает)] Скобки немного неудобны для использования с несколькими уровнями каталогов. Если вы пишете (**) , двойная звездочка теряет свое особое значение (только один уровень каталога совпадает). И в основном вы не можете использовать / внутри круглых скобок, поэтому (**/*) не является допустимым шаблоном. Однако особый случай (**/) работает, поэтому вы можете написать zmv '(**/)(*).erb' '$1$2.haml' .

  • Используйте параметр -w , и в этом случае каждый $ N соответствует тексту, сопоставляемому N -тисимволом в шаблоне источника. Например, zmv -w '**/*.erb' '$1/$2.haml' делает то, что вы хотите.

Обратите внимание, что вы всегда должны использовать одинарные кавычки вокруг заменяющего текста (или использовать \$ ), иначе $ s расширяются оболочкой, прежде чем они zmv встроенную команду zmv .

  • Отдельный путь для файлов .zcompdump
  • Получить полный путь к текущему загрузочному файлу zsh (например, zshrc или zshenv)
  • Возможно ли прочитать содержимое файла, который был получен с помощью интерактивной оболочки?
  • эквивалент часов в zsh
  • Как я могу использовать bindkey для запуска скрипта?
  • Как настроить .zshrc для specfic os
  • Когда необходимо включить `emulate -LR zsh` в функцию, вызванную zsh-виджетами?
  • Использование расширения параметра для создания списка аргументов для `mkdir -p`
  • Почему мой список не преобразуется в массив в сценарии запуска .zshrc?
  • как я могу профилировать время рендеринга в zsh?
  • Zsh вложенная команда args $ SHLVL ошибка?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.