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
답변
변수로
- 디렉토리를 변수에 저장하십시오.
`DIR=./really/long/path/
- 이동 사용 :
mv "$DIR"foo.bar "$DIR"foo.bz
한 줄에 : DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
디렉토리 변경
cd
작업하려는 디렉토리로 이동할 수도 있습니다 .cd ./really/long/path
- 그런 다음 파일 이름을 변경하십시오.
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