Linux mv
명령이 중단 되면 어떻게됩니까 ? 전체 디렉토리를 다른 곳으로 옮기고 이동하는 동안 중단하십시오. 소스 디렉토리가 여전히 변경되지 않습니까?
답변
당신이 디렉토리로 이동하면 동일한 파일 시스템을, 당신은 단지 또 하나의 파일 시스템의 한 위치에서 디렉토리 항목을 이동합니다. 예를 들면, mv /source/dir /target/dir
의 디렉토리 항목이 삭제됩니다 dir
에서을 /source
하고 새로운 하나를 만들 /target
. 그것은 하나의 원자 시스템 호출 (즉, 중단 불가능)에 의해 수행됩니다. dir
디렉토리 자체의 실제 내용뿐만 아니라 디렉토리 항목을 포함하는 inode 는 영향을받지 않습니다.
한 파일 시스템에서 다른 파일 시스템으로 디렉토리를 이동하면 모든 파일이 먼저 새 파일 시스템으로 복사 된 다음 원래 파일 시스템에서 링크 해제됩니다. 따라서 mv
복사하는 동안 중단 하면 이전 위치와 새 파일에 일부 파일의 사본 두 개가 생길 수 있습니다.
답변
GNU 구현은 명령 행에서 인수를 반복하고 먼저 이름을 바꾸려고 시도하고, 실패하면 재귀 적으로 소스를 복사 한 후 재귀 적으로 삭제합니다. 그래서
mv a b c/
삭제 을 복사하기 전에 B를 , 그리고 아무것도 삭제 시작되지 않습니다 대상 복사가 완료되기 전에.
이것은 GNU 구현에만 적용됩니다.
명확히하기 위해 : 경우에 A가 들어있는 디렉토리입니다 D 와 E가 , 그리고 b는 파일입니다, 순서가 될 것입니다
- c / a 만들기
- 복사 a / d-> c / a / d
- 복사 a / e-> c / a / e
- a / d 삭제
- a / e 삭제
- 삭제
- 복사 b-> c / b
- b를 삭제
답변
한 디렉토리를 이동하고 이동을 중단하면 원래 디렉토리는 그대로 유지됩니다.
$ mv a b/
여러 디렉토리를 이동하면 중단 된 시간에 따라 각 디렉토리가 소스 또는 대상에서 그대로 유지됩니다.
$ mv a b c/
내 답변을 얻는 방법 :
$ mv --version
mv (GNU coreutils) 8.21
$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals. If the copy fails, then the part
that was copied to the destination partition is removed. If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.
테스트로, 큰 폴더를 NFS 디렉토리에 복사하고 중단했으며 소스 큰 폴더의 파일 수가 동일하게 유지되었고 부분 내용이 NFS 디렉토리에 남아있었습니다. “find. -type f | wc -l”을 사용하여 확인했습니다.
시몬의 대답이 맞는 것 같습니다.
답변
받아 들여진 대답은 파일 시스템 간 이동에 대해 분명히 잘못되었습니다. 사실 이미 몇 번이나 많은 문제를 해결했습니다. 서브 디렉토리가 포함 된 디렉토리를 이동할 때 서브 디렉토리의 파일은 전체 서브 디렉토리가 복사되기 전에 삭제되지 않습니다. 이것은 “개체 별 개체”의 실제 의미입니다. 하위 디렉터리는 개체 (파일)이므로 대상을 삭제하기 전에 대상의 완전한 복사본으로 무결성을 유지해야합니다. 그래서 시몬의 대답은 나에게 맞는 것 같습니다.
답변
아니요. mv는 개체별로 개체를 작동하므로 이미 처리 된 개체는 소스에서 제거됩니다.
답변
물론 아니야 개체별로 이동합니다. 따라서 인터럽트 지점까지 목적지로 이동 한 객체는 더 이상 소스에 존재하지 않아야합니다.
큰 파일 (다른 파일 간)에 대해 mv가 발행되었고 중단 된 경우 소스는 손상되지 않습니다. 대상에서 중단 지점까지 불완전한 파일이 표시됩니다.
그러나 동일한 명령으로 mv를 복원하면 프로세스가 계속됩니다.
답변
터미널에서 연결을 끊고 mv를 중단하려면 백그라운드로 보내십시오.
* press Ctrl+Z
# bg
# disown