디렉토리가 있다고 가정 해 봅시다 /hello
.
그래서 나는 그렇게 했습니다 mv /hello /hello2
.
/hello
이사 하고 싶나요 /hello2/hello
? 아니면 내가 /hello
이사하고 있는 걸까 /hello2
?
이렇게 하면 일관성 없는 결과가 나오는 것 같습니다.
답변1
mv a b
a
if b
가 b
디렉토리이거나 디렉토리에 대한 심볼릭 링크 로 들어가 보십시오 . 그렇지 않으면 이름이 a
로 변경됩니다(또는 다른 파일 시스템에 있는 경우 복사 및 삭제됩니다) b
.
파일을 디렉터리로 이동하는 일관된 결과를 얻으려면 다음을 수행할 수 있습니다.
mv file dir/.
존재하지 않으면 dir
오류가 발생하고 이름이 바뀌지 file
않습니다 dir
.
mv file dir/
또한 작동하지만 file
그 자체가 유형인 경우에는 작동하지 않습니다.목차그리고 dir
그것은 그 자체로 존재하지 않습니다.
반면, rename
대상 파일이 디렉터리로 존재하는지 여부에 대해 걱정할 필요 없이 작업을 수행하려면 GNU mv를 사용하여 다음을 수행할 수 있습니다.
mv -T file dest
이 경우 디렉터리이면 file
이동되지 않습니다. 그러나 및가 모두 디렉토리이고 비어 있으면 이름이 변경되고 원본은 삭제됩니다. 둘 다 디렉토리이고 비어 있지 않으면 불평합니다.dest
dest
file
dest
dest
file
dest
dest
dest
mv -T
file
만약 과 dest
이면 동일아니요디렉토리(디렉토리에 대한 심볼릭 링크 포함)의 file
이름이 변경되고 dest
(쓰기 권한이 없는 경우 메시지가 표시되지만 dest
) 원래 디렉토리는 dest
삭제됩니다. 디렉토리 기호 링크의 경우 mv file dest
상황이 다릅니다 . dest
를 사용하면 -T
이름 file
을 로 바꾸지만 을 dest
사용하지 않으면 가 -T
가리키는 file
디렉토리로 이동합니다 dest
.
그 후에는 이름 mv -T file dest
이 file
바뀌 dest
거나 오류 메시지(또는 프롬프트)가 표시됩니다. 명령이 성공하면 원래 명령 dest
(이전에 존재했던 경우)이 삭제됩니다.
답변2
이는 모두 /hello2
이름이 지정된 디렉터리가 이미 존재하는지 여부에 따라 다릅니다.
/hello2
존재하고 디렉토리인 경우 항상 으로 mv
이동됩니다 ./hello
/hello2/hello
/hello2
존재하지 않는 경우 mv
항상 이름 /hello
이 로 변경됩니다 /hello2
.
/hello2
파일이 존재하고 파일인 경우 오류가 발생합니다 cannot overwrite non-directory 'hello2' with directory 'hello'
.
답변3
나는 이것을 시도했다
mkdir test1
mv -v test1 test2
output:`test1' -> `test2'
mkdir test1
mv -v test2 test1
output: `test2' -> `test1/test2'
touch test2
output:mv: cannot overwrite non-directory `test2' with directory `test1'
이것이 모든 것을 설명해주기를 바랍니다. -v
자세한 모드입니다.