디렉토리 경로를 반복하지 않고 긴 디렉토리 경로를 가진 명령 행 파일 이동 명령 을 실행하는

mv두 번째 인수에 전체 경로를 입력하지 않고 명령 을 실행하는 방법이 있습니까?

예:

mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz



답변

bash의 괄호 확장을 사용할 수 있습니다. 이:

mv my/file/that/has/a/really/long/path/foo.{bar,baz}

로 확장됩니다 :

mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz

그런 다음 mv두 가지 인수로 실행됩니다. 버팀대 확장에 대한 자세한 내용은 http://wiki.bash-hackers.org/syntax/expansion/brace 를 참조 하십시오 .


답변

괄호 확장의 대안으로 bash 쉘의 히스토리 확장 기능을 사용할 수 있습니다 .

  • ! 역사 확장을 소개합니다
  • # 현재 명령을 나타내는 이벤트 지정자
  • $ 마지막 인수를 나타내는 단어 지정자

sed와 같은 s/pattern/replacement구문을 사용하여 확장에서 대체를 수행 할 수 있습니다.

somecommand path/to/foo.bar !#$:s/.bar/.baz

전의.

$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'

경로를 구체적으로 지정하려면 (예를 들어 mv대체로 쉽게 얻을 수없는 완전히 다른 이름의 파일에 대한) h수정자를 사용할 수 있습니다 .

$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'

readline마지막 인수를 잡아 당기는 키 조합을 포함한 다른 옵션 은 bash 콘솔에서 현재 입력 된 매개 변수를 반복하는 방법을 참조하십시오 .


답변

시도해 볼 수 있습니다 :

pushd .
cd /really/long/directory/name/
mv whatever.1 whatever.2
popd

답변

변수로

  1. 디렉토리를 변수에 저장하십시오. `DIR=./really/long/path/
  2. 이동 사용 : mv "$DIR"foo.bar "$DIR"foo.bz

한 줄에 : DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz


디렉토리 변경

  1. cd작업하려는 디렉토리로 이동할 수도 있습니다 .cd ./really/long/path
  2. 그런 다음 파일 이름을 변경하십시오. mv foo.bar foo.bz

한 줄에 : cd ./really/long/path && mv foo.bar foo.bz


답변

디렉토리 이름을 짧게하는 alias 명령을 사용할 수 있습니다.

alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst