답변:
당신이 디렉토리로 이동하면 동일한 파일 시스템을, 당신은 단지 또 하나의 파일 시스템의 한 위치에서 디렉토리 항목을 이동합니다. 예를 들면, mv /source/dir /target/dir
의 디렉토리 항목이 삭제됩니다 dir
에서을 /source
하고 새로운 하나를 만들 /target
. 그것은 하나의 원자 시스템 호출 (즉, 중단 불가능)에 의해 수행됩니다. dir
디렉토리 자체의 실제 내용뿐만 아니라 디렉토리 항목을 포함하는 inode 는 영향을받지 않습니다.
한 파일 시스템에서 다른 파일 시스템으로 디렉토리를 이동하면 모든 파일이 먼저 새 파일 시스템으로 복사 된 다음 원래 파일 시스템에서 링크 해제됩니다. 따라서 mv
복사하는 동안 중단 하면 이전 위치와 새 파일에 일부 파일의 사본 두 개가 생길 수 있습니다.
strace mv /fs1/dir /fs2/
- 매우 마지막 MV가하는 호출한다 unlinkat
(그들은 복사로 하나없는 한) 한 번에 모든 소스 파일을합니다.
GNU 구현은 명령 행에서 인수를 반복하고 먼저 이름을 바꾸려고 시도하고, 실패하면 재귀 적으로 소스를 복사 한 후 재귀 적으로 삭제합니다. 그래서
mv a b c/
삭제 을 복사하기 전에 B를 , 그리고 아무것도 삭제 시작되지 않습니다 대상 복사가 완료되기 전에.
이것은 GNU 구현에만 적용됩니다.
명확히하기 위해 : 경우에 A가 들어있는 디렉토리입니다 D 와 E가 , 그리고 b는 파일입니다, 순서가 될 것입니다
mv
에서도 작동하므로 GNU 전용이 아닙니다.
한 디렉토리를 이동하고 이동을 중단하면 원래 디렉토리는 그대로 유지됩니다.
$ 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를 중단하려면 백그라운드로 보내십시오.
* press Ctrl+Z
# bg
# disown
fsck
(디스크가 깨끗하게 마운트 해제되지 않았기 때문에 재부팅시 자동으로 실행 됨).