![전체 경로를 다시 입력하지 않고 "제자리에" 중첩된 경로의 파일 이름을 바꾸려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/173036/%EC%A0%84%EC%B2%B4%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%EC%9E%85%EB%A0%A5%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%22%EC%A0%9C%EC%9E%90%EB%A6%AC%EC%97%90%22%20%EC%A4%91%EC%B2%A9%EB%90%9C%20%EA%B2%BD%EB%A1%9C%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
mv
깊은 디렉토리에 있는 다른 파일의 이름을 바꿔야 하는 경우가 종종 있습니다 .
mv /a/long/path/to/a/file.txt /a/long/path/to/a/file.txt.bak
하지만 전체 경로 이름을 다시 입력하고 싶지 않습니다. 사용할 수 있는 간단한 약어나 별칭이 있나요? 즉:
$ mv /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak
(참고: 이는 다른 시간에 다른 디렉터리에 있는 간단한 단일 파일 이름 바꾸기를 위한 것입니다.대량 이름 바꾸기)
답변1
사용하다버팀대 확장:
mv /a/long/path/to/a/file.txt{,.bak}
그러면 /a/long/path/to/a/file.txt
빈 접미사의 이름 이 /a/long/path/to/a/file.txt
with suffix 로 변경됩니다 .bak
.
답변2
아마도 그림과 같이 중괄호 확장을 사용하겠지만프레디의 대답, 둘 다 대화식을 사용할 bash
수 있습니다zsh
역사적 확장, 표시기를 사용하여 #$
현재 줄에서 지금까지 입력한 마지막 단어를 나타냅니다.
mv /a/long/path/to/a/file.txt !#$.bak
답변3
기본적인 질문일 수 있지만 기존 질문/답변을 찾을 수 없습니다. 내가 만든 간단한 솔루션은 ~./bash_functions
다음 기능입니다.
#/home/user/.bash_functions
function mv-rn() {
mv $1 $(dirname $1)/${2}
}
그래서 지금:
$ mv-rn /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak
(**참고, 위 함수가 별칭으로 인식되도록 하려면 ~/.bashrc에 이를 포함해야 합니다.)
# Function definitions.
if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
fi
답변4
(cd /a/long/path/to/a && mv file.txt file.txt.bak)
&&
cd가 성공한 경우에만 mv가 실행되는지 확인하세요 . 대괄호는 명령이 하위 쉘에서 실행된다는 것을 의미하므로 cd는 기존 쉘의 작업 디렉토리를 변경하지 않습니다.