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


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.