하나의 명령으로 상대 경로를 이동할 수 있습니까?

하나의 명령으로 상대 경로를 이동할 수 있습니까?

이 질문은 다음과 유사합니다.하나최근에 물었지만 이 질문에 대한 대답은 대체로 AFAICT와 관련이 없습니다. 이 두 질문의 주요 차이점은 전자는 복사에 관한 것이고 이것은 이동에 관한 것입니다. 게다가 이전 질문에서는 상대 경로를 참조하여 불필요하게 구체화했습니다.문서. 이 질문에서 나는 지나치게 구체적인 사례를 제거했습니다.

나는 이 작업을 너무 자주 수행하기 때문에 이를 수행하는 표준 Unix 방식이 있는지 궁금합니다.

% mkdir -p /TARGETDIR/relative/path/to
% mv ./relative/path/to/x /TARGETDIR/relative/path/to

즉, 단순히 이동하고 싶지는 않지만 somefile실제로 /TARGETDIR는 전체를 "이동"(말하자면)하고 싶습니다.상대 경로.

동일한 효과를 얻기 위해 쉘 함수나 스크립트를 작성할 수 있다는 것을 알고 있지만 단일 명령을 사용하여 이를 달성할 수 있는 방법이 이미 존재하는지 궁금합니다.

답변1

Rsync는 다음을 수행할 수 있습니다.

rsync -R --remove-source-files a/b/c/d /TARGETDIR/

하지만 엄밀히 말하면 이름을 바꾸는 것보다 복사하는 것에 가깝습니다.

함수는 매우 간단합니다.

mkmv() {
  mkdir -p -- "$2/$(dirname -- $1)" && mv -- "$1" "$2/$1"
}

더 효율적일 수 있습니다(단, rsync파일이나 디렉터리의 권한이나 기타 속성을 복사할 수 있는 옵션이 더 많이 있지만).

관련 정보