Быстрый способ включить путь к каталогу при вызове mv?

Быстрый способ включить путь к каталогу при вызове mv?

Часто я работаю в корневом каталоге rails и обнаруживаю, что мне приходится дважды переходить по одному и тому же пути каждый раз, когда мне нужно переместить файл:

mv app/views/layouts/application.html.erb app/views/layouts/application.html.haml

Haml — это всего лишь один из многих примеров, где мне нужно изменить имя файла, не изменяя каталог, в котором он в данный момент находится, и не меняя каталог. Есть ли способ сделать это?

решение1

Использоватьрасширение скобки:

mv very/long/path/to/filename.{old,new}

будет расширяться до

mv very/long/path/to/filename.old very/long/path/to/filename.new

решение2

Если вы собираетесь работать в каталоге, вы можете временно переключиться на него.

pushd app/views/layouts
mv application.html.erb application.html.haml
popd

В Linux вы можете использоватьrenameутилита (вызывается rename.ulв Debian, Ubuntu и производных) для изменения части имени файла (которая может быть в части каталога). rename foo bar path/to/fileизменяет первое вхождение в fooна path/to/file. barЕсли имя файла не содержит первую строку, файл остается на месте.

rename .erb .haml app/views/layouts/application.html.erb
rename .erb .haml app/views/layouts/*.html.erb       # do several in one go
rename .erb .haml app/views/layouts/application.*    # never mind if application.js and application.html.gz also exist

Если в командной строке имеется несколько последовательных слов, имеющих общую основу, можно использовать раскрытие фигурных скобок:

mv app/views/layouts/application.html.{erb,haml}

решение3

Вы можете cdв каталоге в подоболочке:

(cd app/views/layouts && mv application.html.erb application.html.haml)

Здесь скобки выполняют команды в новом bashпроцессе оболочки.

решение4

Вы можете определить функцию:

mv-rename () {
  mv -- "${1}" "$(dirname -- "${1}")/${2}"
}

Использование:

mv-rename app/views/layouts/application.html.erb application.html.haml

Связанный контент