mv를 호출할 때 디렉터리 경로를 포함하는 빠른 방법은 무엇입니까?

mv를 호출할 때 디렉터리 경로를 포함하는 빠른 방법은 무엇입니까?

종종 나는 파일을 이동하고 싶을 때마다 동일한 경로를 두 번 탐색하는 레일스 디렉토리의 루트에서 작업할 것입니다.

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.ulDebian, Ubuntu 및 파생 제품에서 호출됨)를 사용하여 파일 이름의 일부(디렉토리 부분에 있을 수 있음)를 변경합니다. in rename foo bar path/to/file의 첫 번째 발생을 로 변경 합니다 . 파일 이름에 첫 번째 문자열이 포함되어 있지 않으면 파일은 그대로 유지됩니다.foopath/to/filebar

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

관련 정보