Есть ли ярлык для ссылки на путь первого аргумента в команде MV? - PullRequest
10 голосов
/ 01 апреля 2011

Я часто использую mv для переименования файла.Например,

mv app/models/keywords_builder.rb app/models/keywords_generator.rb

Для этого мне нужно написать (хорошо, вкладка завершена) путь для второго параметра.В этом примере это не так уж плохо, но иногда путь глубоко вложен, и кажется, что это довольно сложная типизация.

Есть ли более эффективный способ сделать это?

Ответы [ 5 ]

20 голосов
/ 01 апреля 2011

И еще один способ: расширение скобки .

mv app/models/keywords_{builder,generator}.rb

В общем

before{FIRST,SECOND}after

расширяется до

beforeFIRSTafter beforeSECONDafter

Так что это также полезно для других переименований, например

mv somefile{,.bak}

расширяется до

mv somefile somefile.bak

Работает в bash и zsh.

Дополнительные примеры:

11 голосов
/ 01 апреля 2011

Вы можете использовать расширение истории следующим образом:

mv app/modules/keywords_builder.rb !#^:h/keywords_generator.rb
  1. ! вводит расширение истории.
  2. # относится к набираемой в данный момент команде
  3. ^ означает первый аргумент
  4. :h - это модификатор для получения "заголовка", то есть каталога без файловой части

Поддерживается в bash и zsh.

Документы:

4 голосов
/ 01 апреля 2011

Один из способов - ввести первое имя файла и пробел, а затем нажать Ctrl + w, чтобы удалить его.Затем дважды нажмите Ctrl + y, чтобы получить две копии имени файла.Затем отредактируйте вторую копию.

Например,

mv app/models/keywords_builder.rb <Ctrl+W><Ctrl+Y><Ctrl+Y><edit as needed>
1 голос
/ 01 апреля 2011

или cd apps/models && mv keywords_builder.rb keywords_generator.rb && cd -

0 голосов
/ 11 января 2018

Комбинированные ответы Микеля и гикозавра с дополнительным использованием ": p"

используйте расширение скобки, чтобы избежать повторения первого аргумента:

mv -iv {,old_}readme.txt # 'readme.txt' -> 'old_readme.txt'

mv -iv file{,.backup} # 'file' -> 'file.backup'

использовать расширение истории, чтобы избежать повторения первого аргумента:

mv -iv "system file" !#$.backup # 'system file' -> 'system file.backup'

имя файла может быть напечатаноиспользуя обозначение «p» для дальнейшей редакции:

mv -iv "file with a long name" !#$:p

, затем нажмите «↑» для редактирования команды

...