![하나의 명령으로 상대 경로를 이동할 수 있습니까?](https://linux55.com/image/29656/%ED%95%98%EB%82%98%EC%9D%98%20%EB%AA%85%EB%A0%B9%EC%9C%BC%EB%A1%9C%20%EC%83%81%EB%8C%80%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%9D%B4%EB%8F%99%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
이 질문은 다음과 유사합니다.하나최근에 물었지만 이 질문에 대한 대답은 대체로 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
파일이나 디렉터리의 권한이나 기타 속성을 복사할 수 있는 옵션이 더 많이 있지만).