Часто я работаю в корневом каталоге 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