mv가 디렉토리를 바꾸지 않고 디렉토리로 이동하도록 결정하는 방법은 무엇입니까?


18

디렉토리가 있다고 가정 해보십시오 /hello.

그런 다음 mv /hello /hello2.

내가 이사 /hello하고 /hello2/hello있습니까? 아니면 내가 이사 /hello하고 /hello2있습니까?

이와 같은 작업을 수행하면 일관성이없는 결과가 나타납니다.


1
어떤 경우에 결과가 일치하지 않습니까? 대상 디렉토리가 존재할 때마다 대상 디렉토리로 이동하고 그렇지 않으면 이름이 바뀝니다.
— jmathew

일관성이 없습니다. 동일한 명령이 동일한 작업을 수행해야합니다. 그것은 명령이 모호하다는 것을 의미합니다.
— user4951

문맥 내에서 일관되게 작동하기 때문에 실제로 일관성이 없습니다. 혼란 스럽지만 더 많이 생각할 수는 있지만 모든 시나리오에서 작동하려면 명령이 그런 식이어야합니다.
— jmathew

오히려 그것이 그것이 디자인되고 논리적 인 방법이라고 말하고 싶습니다. mv파일과 함께 사용 하면 같은 일을합니다. 이름 바꾸기. mv그러나 디렉토리와 함께 하나의 mv명령 때문에 하위 디렉토리로 전체 디렉토리를 삭제 하는 것은 좋지 않습니다. 안전한. 로 이동됩니다 test1/test2. 그러나 여전히 달성 alias하려면 주어진 매개 변수가 디렉토리인지 확인한 다음 rm -rf 디렉토리를 수행하고 mv명령을 사용하지만 자신의 위험에 따라 사용하십시오.
— harish.venkat

귀하의 예는 "이런 일을하는 것 같습니다"에 근거하여 과거에 일어난 일을 잘못 기억 한 것에 근거한 것 같습니다. 두 경우 /hello와는 /hello2디렉토리이며, 그때 나는 것으로 나타났습니다 cp /hello /hello2일관성의 하나입니다. 후행 슬래시의 조합에 따라 때때로 내용이 /hello에 복사되고 /hello2때로는 디렉토리 자체가 복사됩니다.
— Izkata

답변:


16

mv a b디렉토리 또는 디렉토리에 대한 심볼릭 링크 인 경우 이동 a을 시도합니다 . 그렇지 않으면, 이름을 변경 (또는 복사 및 다른 파일 시스템의 경우 삭제)됩니다 에 .bbab

파일을 디렉토리로 이동하는 일관된 결과를 얻으려면 다음을 수행하십시오.

mv file dir/

또는

mv file dir/.

경우 dir존재하지 않는 오류를 얻을 수 있습니다, 그것은 이름을 변경하지 않습니다 file에 dir.

반면에 rename대상 파일이 디렉토리로 존재하는지 여부를 걱정하지 않고 GNU mv를 사용하여 다음 작업을 수행 할 수 있습니다.

mv -T file dest

이 경우 디렉토리가 if이면 file이동되지 않습니다 . 두 경우, 그리고이 디렉토리는 다음과 비어, 로 이름이 변경됩니다 (원래는 제거). 둘 다 디렉토리이고 비어 있지 않으면 불평합니다.destdestfiledestdestfiledestdestdestmv -T

file및 디렉토리 dest가 아닌 경우 (및 디렉토리에 대한 심볼릭 링크를 포함하는 심볼릭 링크를 포함하는 경우) 와 file이름이 바뀌고 dest(에 대한 쓰기 권한이없는 경우 프롬프트가 dest표시됨) 원본 dest이 제거됩니다. 디렉토리에 대한 심볼릭 링크가있는 mv file dest경우에는 차이점이 있습니다 dest. 로 -T, file로 이름이 변경되고 dest,하지만하지 않고 -T, file가 가리키는 디렉토리로 이동합니다 dest.

그래서 요약하면, 후 mv -T file dest, 하나 file에 이름이 변경된 것 dest또는 오류 메시지 (또는 메시지)를 얻을 수 있습니다. 명령이 성공한 경우, 원본 dest이 이미 존재하는 경우 제거됩니다.


14

'/ hello2'라는 디렉토리가 이미 존재하는지 여부에 따라 달라집니다.

/ hello2가 존재하고 디렉토리 인 경우 이동은 항상 / hello를 / hello / hello2로 이동합니다.

/ hello2가 없으면 이동은 항상 / hello의 이름을 / hello2로 바꿉니다.

/ hello2가 존재하고 파일 인 경우 디렉토리가 아닌 'hello2'디렉토리를 '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상세 모드입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.