bash에서 경로를 반복하지 않고 어떻게 파일의 이름을 바꿀 수 있습니까? [복제]


38

중복 가능성 :
bash 명령에서 텍스트 재사용

파일 이름을 몇 개의 디렉토리로 깊게 바꾸려면 경로를 반복하지 말고 어떻게해야합니까?

예 :

mv path/to/old_filename.txt path/to/new_filename.txt

나는 이것을 만들 수있는 방법이 있는지 궁금 하네.

mv path/to/old_filename.txt (?)new_filename.txt

어디에 (?) "같은 디렉토리에서"말하는 어떤 방법 일 것입니다.

답변:


25

bash 사용하기 역사 확장 :

mv path/to/oldfile !#:1:h/newfile

어디에 !#:1:h 의미 : 현재 입력중인 줄 ( "! #")에서 첫 번째 단어 ( ": 1")를 가져 와서 경로 구성 요소 ( ": h"- 머리) 만 가져옵니다.


이것은 원래의 질문자가 해결책이 될 수 있다고 가정 한 것과 가장 가깝고 알아두면 유용하므로 +1합니다.
crazy2be

2
시원한! Darth의 중괄호 확장 방법이 더 쉽다고 생각합니다.하지만 이것은 제가 요청한 것입니다.
Nathan Long

오늘 두 가지 새로운 것을 배웠습니다. 또한 나는 중괄호 확장을 "다스의 중괄호 확장"으로 생각할 것입니다.
PileOfMush

마침내 이렇게하는 법을 발견했습니다, 감사합니다!
ntrp

61

중괄호 확장을 사용할 수 있습니다. mv path/to/{old_filename.txt,new_filename.txt}

이리 bash 쉘에서 중괄호 확장에 관한 GNU 가이드로의 링크이다. bash 쉘은 대체 목록을 정의하고 반복 할 때마다 다른 대체를 사용하여 매개 변수를 반복하도록 bash에 지시한다.

예를 들어,

a{b,c,dd,e}

~로 확장됩니다.

ab ac add ae

유일한 확장은 확장 된 반복이 대상 프로그램에 대한 인수로 서로를 따라갈 수 있어야한다는 것입니다.


5
또는 최소 유지 : mv path/to/{old,new}_filename.txt. 이것은 또한 명령의 반전 또는 다른 종류의 반복에 도움이됩니다. 예를 들어 여러 번했습니다. mv /etc/X11/xorg.conf{,.backup}, 간단한 변경으로 프로세스를 되돌릴 수 있음 mv /etc/X11/xorg.conf{.backup,}.
Daniel Andersson

26

다스의 대답 위의 내용은 훌륭하지만, cd, 당신은 또한 서브 셸 사용을 고려할 수 있습니다 :

(cd path/to && mv old_filename.txt new_filename.txt)

디렉토리 변경은 서브 쉘에서 이루어지기 때문에 대화식 쉘에서 디렉토리를 실제로 변경하지는 않습니다.


1
중요한 단점 : 탭 완성을 사용할 수 없습니다. old_filename.txt.
bluenote10

9

디렉토리에서 여러 명령을 수행 할 경우 유용한 또 다른 방법은 다음과 같습니다.

pushd /path/to
mv oldfile newfile
...
popd

5

나는 좋다. @ 다스의 대답 . 다음은 대안입니다. cd path/to && mv oldfile newfile && cd -


1
참고 사항 mv 실패 (예 : 권한 없음)하면 path/to 예배 규칙서. 시도해 볼 수 있습니다. cd path/to && mv oldfile newfile ; cd - 보장하기 위해 cd - 다음을 제외하고 항상 실행됩니다. cd path/to (사용 권한 없음) 여전히 실행됩니다. cd - 원하지 않는 이전 디렉토리로 이동하십시오. mlc (+1) 서브 쉘 대답이 더 좋습니다. 나는 짐작한다. cd . && cd path/to && mv oldfile newfile ; cd - 99.9 %의 시간을 보냈습니다 ( cd . 자신이나 현재 dirs 권한이 변경된 경우에만 실패합니다. 그 경우에 다른 방향으로가는 것은 결과가 그렇게 나쁘지 않습니다.
dr jimbob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.