이동하지 않고 항상 복사하고 삭제하는 것이 더 낫습니까?


18

일반적으로 말해서, 파일 이동을 취소하면 대상 또는 소스가 불완전 할 수 있음을 알면 당황하게됩니다. 이 질문은 Windows 및 Unix 기반 플랫폼에 적용됩니다. 두 경우 모두 이동 명령이 어떻게 작동하는지 정확하게 기억할 수 없습니다. 예를 들어 디렉토리를 이동하는 경우; 전체 디렉토리를 복사 한 후 삭제하거나 각 파일을 개별적으로 복사 및 삭제합니까?

나는 항상 같은 것을 입력 한 후에 mv verybigdir dest아마도 입력해야했을 것임을 알고 있습니다 cp -R verybigdir dest  &&  rm -R verybigdir( &&첫 번째가 성공한 경우에만 운영자가 다음 명령으로 진행합니다). 내가 누를 때 무슨 일이, 정확히 어떻게 Ctrl+ C이동을 통해 반 방법을? 마찬가지로 취소 버튼을 누르면 Windows에서 정확히 어떻게됩니까?

나는 무언가를 옮긴 횟수 (마지막 시간은 사용했을 때)를 세고 svn디렉토리가 분할되어 두 개의 디렉토리를 가졌습니다. 모든 응용 프로그램 이 동일한 방식으로 파일 그룹을 이동하는 것은 아니기 때문에 대답이 어렵다고 생각합니다 .


16
무엇을하든 먼저 삭제하지 마십시오.
mtone

@monotone Hilarious +1
Nick Bolton

답변:


10

Windows에서 동일한 드라이브와 파티션으로 이동하면 Unix의 mv 명령처럼 작동하고 폴더 이름을 바꾸거나 상위 폴더를 변경합니다. 그러나 다른 드라이버 나 파티션으로 옮기려면 파일별로 파일을 복사하고 삭제하므로 압축되지 않은 tar 파일이나 zip 파일을 사용하여 파티션과 하드 드라이브간에 파일을 더 빠르게 이동시키는 것이 더 효율적인 이유 . 당신이 그것을 취소한다면, 그것은 단순히 그 위치에서 멈출 것입니다. 유닉스에서도 마찬가지라고 생각하지만 100 % 확신 할 정도로 실험하지는 못했습니다. inode를 변경하기 만하면되지만 다른 파티션이나 드라이브에있는 경우 해당 파티션이나 드라이브의 섹터로 복사해야합니다. 전송 중에 취소하면 이미 일부 파일을 이동했을 수 있으며 전송중인 파일에 해당 파일이 표시됩니다.

업데이트 : 이동을 취소하고 다시 시작하려면 이동 명령을 다시 발행하십시오. 대상 폴더가 이미 존재하지만 파일이 전송 되 자마자 파일이 원래 폴더에서 삭제되기 때문에 파일이 원래 폴더 이전에 존재하지 않거나 두 이동 순서 사이에 추가되지 않는 한 파일을 덮어 쓰지 않음을 경고 할 수 있습니다. 소스 (다른 파티션 또는 드라이브에있는 경우).


아, 나는 압축에 대해 생각하지 않았다.
Nick Bolton

실제로 압축 할 필요는 없으며 시간이 많이 걸릴 수 있습니다. 때로는 압축 수준 0 (스토리지)이 큰 폴더를 드라이브간에 훨씬 빠르게 이동시키는 작업을 수행 할 수 있습니다.
Wolf

"Windows에서 동일한 드라이브와 파티션으로 이동하면 Unix의 mv 명령처럼 작동하고 폴더 이름을 바꾸거나 상위 폴더를 변경합니다." -Windows 탐색기를 사용할 때 사실이 아닙니다. 그것은 쓰레기를 많이, 그것은 나이 소요되며, 두 개의 디렉토리에 게재 된 내용 분할로 끝낼 수 않습니다, 참조 내 질문이 답을 .
maaartinus

@maaartinus 실제로 Windows 탐색기가 작동하는 방식은 부모 노드를 변경하지 않고 폴더를 재귀 적으로 탐색하는 것입니다. 그러나 Windows 탐색기의 경우에는 원자 이동이 아닙니다. 나는 커맨드 라인이 사용되었다고 가정했다.
Wolf

11

타임 스탬프에 관심이 있다면 mv평범한 것보다 낫습니다 cp.

( cp -a타임 스탬프를 유지하고 Windows에 비슷한 것이 있다고 가정합니다).


1
아하, 타임 스탬프. 나는 그것을 고려하지 않았다! +1
Nick Bolton

타임 스탬프도 정직하게 중요합니까?
Marcin

1
@Marcin, 그들은 당신이 묻는 것이라면 이유가 있습니다 ...
macek

10

아니.

설명:

mv verybigdir dest

verybigdir의 이름을 dest로 바꿉니다. 이것은 원자 작업입니다. 즉, 중간에 실패 할 수 없습니다.

dest가 다른 장치에 있으면 mv가 먼저 복사 한 다음 이전 버전을 삭제합니다. 이것은 원자 작업이 아닙니다. 실패하면, debig에 verybigdir의 일부 사본 만있을 수 있지만 verybigdir은 여전히 ​​완료됩니다.

예, 다른 응용 프로그램은 파일을 다르게 이동할 수 있습니다.


2
실제로 Linux의 mv는 전체 트리를 대상으로 복사 한 다음 소스에서 전체 트리를 삭제하는 대신 각 파일 또는 디렉토리를 개별적으로 복사 / 삭제한다고 생각합니다. 중간에 취소하면 일부가 종료됩니다 두 위치에 파일이 있고 어느 디렉토리도 완료되지 않습니다.
rob

3
@rob : 아니요. 디렉토리는 다른 파일과 동일하게 취급됩니다. 당신이 말하는 행동은로 달성됩니다 mv verybigdir/* dest.
dmckee

2
기본적으로 mv는 "cp && rm"방식으로 각 인수를 처리 mv verybigdir/* dest합니다. verybigdir의 mv를 많은 개별 이동 작업으로 나눕니다. Windows와 달리 Linux 프로그램 / 도구는 "*"가 표시되지 않으며 쉘로 확장된다는 것을 항상 기억하십시오.
Jürgen A. Erhard 2016 년

4

Windows에서는 항상 이동 대신 복사 및 삭제합니다. 나는 한 번 파일을 이동하고 있었고, 이것이 처음으로 나쁜 메모리 스틱을 발견 한 곳입니다. 파일을 이동할 때 사이에 멈추고 오류가 발생하여 소스 폴더를 확인하고 파일이 사라진 다음 대상을 확인하고 손상된 파일이있었습니다. 이것은 더 큰 크기의 파일에서 더 자주 발생했으며 대부분은 다운로드에 시간이 걸리므로 복사 및 삭제를 권장합니다. 처음에는 시간을 절약하고 결국에는 돈을 지불합니다.


3

유닉스에서는 파일 시스템 경계를 넘지 않는 이동 mv에서 데이터를 복사하지 않습니다. 다양한 디렉토리에서 inode 데이터베이스 만 업데이트합니다. 이것은 큰 파일 보다 훨씬 빠릅니다 cp.

또한 mv파일 시스템 경계 를 넘어서 사용 하면 복사 및 삭제 메커니즘이 자동으로 호출됩니다.

그래서 당신이 선호한다고 생각합니다 mv.


멋지게 요약했습니다.
Nick Bolton

"복사 및 삭제 메커니즘"은 "각 파일을 복사 한 다음 삭제"또는 "모든 파일을 복사 한 다음 모두 삭제"로 해석 될 수 있습니다.
j_random_hacker

2

Windows에서 최소한 이동은 단순히 자동화 된 복사 및 삭제입니다. mv는 각 파일을 개별적으로 이동한다고 생각합니다. ^ c-ing은 파일을 잃지 않을 것입니다.

이것에 대한 나의 해결책은 : 나는 그것을 옮기고 싶지 않다면 절대로 움직이지 마십시오.


1

소스 파일 시스템에서 ACL을 사용하지만 대상에서는 사용하지 않는 경우 Linux의 mv는 소스를 복사 한 다음 대상에서 ACL을 설정할 수 없기 때문에 중지됩니다. 따라서 파일이 양쪽에있게됩니다. 이 동작을 막기 위해 mv에는 스위치가 없으므로이 경우에는 cp && rm이 바람직합니다.

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