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


16

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

예:

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


1
cd디렉토리로 갈 수없는 이유는 mv무엇입니까?
zpletan

나는 일상 업무에서 여러 디렉토리에서 이러한 종류의 명령을 실행하는 경우가 많다. 종종 주어진 부모 디렉토리에서 여러 명령을 실행해야합니다.
Finbarr

어떻게 든 나는 !! 터미널에서 (이중 느낌표)는 마지막으로 실행 된 명령을 실행하는 데 사용됩니다. 마지막 명령에 매개 변수 / 텍스트를 추가 할 수도 있지만 마지막 명령에서 텍스트를 변경 / 제거하지 마십시오. 그것을 시도하고 당신이 성공하면 나는 대답처럼 이것을 드롭합니다. 행운을 빕니다!
Geppettvs D' Constanzo

답변:


32

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 를 참조 하십시오 .


3
영광 스럽습니다. 네가 할 수있는 줄 몰랐어
Finbarr

5

괄호 확장의 대안으로 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 콘솔에서 현재 입력 된 매개 변수를 반복하는 방법을 참조하십시오 .


2

시도해 볼 수 있습니다 :

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

2

변수로

  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


1
두 번째는 익숙해 보인다 ;-)
zpletan

2
&&마지막 한 줄짜리에서 가장 잘 사용 합니다. 그렇지 않으면, cd실패하면 mv파일이 잘못된 디렉토리에서 실행되어 파일을 덮어 쓸 수 있습니다. 으로는 cd ./really/long/path && mv foo.bar foo.baz, mv경우에만 실행됩니다 cd디렉토리를 변경에 성공합니다.
geirha

-3

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

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

1
-1이 alias test='/var/log' ; cd test제공합니다 -bash: cd: test: No such file or directory.
zpletan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.