전체 경로를 다시 입력하지 않고 "제자리에" 중첩된 경로의 파일 이름을 바꾸려면 어떻게 해야 합니까? [복사]

전체 경로를 다시 입력하지 않고 "제자리에" 중첩된 경로의 파일 이름을 바꾸려면 어떻게 해야 합니까? [복사]

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.txtwith 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는 기존 쉘의 작업 디렉토리를 변경하지 않습니다.

관련 정보