WebDAV에 사용 가능한 Linux 클라이언트를 살펴보면 내가 선호하는 방법은 다음과 같습니다.
GVFS 또는 WebDAV 파일 시스템 모듈 중 하나 (davfs2 또는 fusedav)를 사용하여 원격 WebDAV 서버의 파일을 로컬 파일 시스템 경로에 "매핑"하십시오.
내장 된 cp 명령을 -n
옵션 과 함께 사용하여 대상에서 파일을 "클러버하지 않도록"지시합니다. dash
Ubuntu 와 같은 특정 셸 은 기본적으로 builtin
버전을 실행 cp
하므로이 내장 -n
옵션 이 옵션을 지원하지 않을 수 있습니다 . 최상의 결과를 얻으려면 또는 특정 시스템의 바이너리 위치에 따라 또는 실행하여 GNU Coreutils 버전을 cp
실행 해야합니다./bin/cp
/usr/bin/cp
편집 : 나는 당신의 원래 질문을 잘못 읽었습니다.
나는 당신이 file1.txt
WebDAV 서버에서 두 개의 다른 경로에 파일 이 존재하고 그 두 파일 의 내용 이 정확히 같은 상황이라고 생각합니다. 파일 사본이 이미 있으므로 대역폭을 낭비하기 때문에 파일의 두 번째 또는 세 번째 사본을 다운로드하고 싶지 않습니까?
글쎄, 클라이언트 쪽에서 , 이것은 매우 어려울 것입니다. 이유는 다음과 같습니다.
당신은 볼 필요 는 비교하고 어떤 파일이 고유한지 확인하고, 요구 사항 / 비용은 그 비교를 할 수 있습니다.
나는 당신이 비교하는 것이 WebDAV 폴더 구조의 루트에 상대적인 경로 라고 잘못 생각했습니다 . 경로 평등 비교를 만드는 비용은 매우 쉽습니다. 두 개의 경로 문자열 (예 :)을 보고 문자열이 일치하는지 확인하면됩니다. 그렇다면 중복 된 것입니다. 그렇지 않다면 그렇지 않습니다./dir1/dir2/file1.txt
비교할 수있는 또 다른 것은 경로를 무시하고 파일 이름 입니다. : 그래서, 예를 들어,이 두 파일이 중복이라고 생각 하고 ? 당신이하는 경우 글쎄, 만 에 기초를 비교하는 이름 , 다음이 중복으로 간주 될 것이다. 그러나 사용 사례에 적합한 종류의 테스트를 수행하기 위해 원하는대로 복제에 대한 다양한 테스트를 혼합하고 일치시킬 수 있습니다./dir1/dir2/file1.txt
/dir3/dir4/file1.txt
비교하기에 유용하지 않은 다른 속성으로는 파일 크기 , 속성 ( 메타 데이터 라고도 함 ), 파일 확장명 등이 있습니다. 대부분의 경우 복제 판단력 측면에서는 그다지 중요하지 않습니다. 다른 파일과 동일한 속성을 갖지만 완전히 다른 내용을 가진 파일을 구성하는 것은 쉽지만 대부분의 사람들은 내용이 다른 경우 두 파일이 중복되는 것으로 간주하지 않습니다.
내 의견으로는, 당신이 비교할 수있는 가장 중요한 것은 파일 내용 입니다. 불행히도 WebDAV 클라이언트의 관점에서 볼 때 파일을 이미 다운로드 할 때까지 파일 내용을 알 수있는 방법이 없습니다. 클라이언트와 관련하여 파일 전송 중 또는 후에 파일 내용이 변경 될 수 있습니다.이 경우 파일을 다시 다운로드하면 중복 비교 결과가 변경됩니다.
파일 내용을 비교하는 기본 방법에는 byte for byte 및 hashing이 있습니다. 바이트 바이트는 중복을 확인하는 가장 "보증 된"방법이지만 전체 파일 을 비교해야한다는 제한이 있습니다 . 이로 인해 많은 양의 데이터에 대해 속도가 느려집니다. 또한 중복 감지의 기본 알고리즘 복잡도는임을 고려하십시오. 즉, 중복 O(n^2)
여부를 판별하려면 각 파일의 내용을 서로 다른 파일의 내용과 비교해야합니다. 암호화 해시를 사용하여 파일을 비교하면 비교하거나 전송할 데이터의 양을 크게 줄일 수 있지만 단점은 두 파일이 실제로 다를 수있는 무한한 가능성을 초래한다는 것입니다 해시 충돌이라고하는 동일한 해시가 있습니다.
그러나 클라이언트 관점에서, 다음 중 하나가 아니면 파일 내용이 무엇인지 또는 해시를 알 수 없습니다.
- 서버에서 파일을 다운로드하십시오. 또는
- 서버가 로컬로 해시 값을 계산하도록 확인한 다음 해시를 다운로드하십시오.
전자의 경우 파일을 다운로드하지 않기 위해 파일이 중복인지 확인하기 위해 파일을 다운로드하므로 분명히 할 수는 없습니다 . 비교를 수행 하지 않으려는 대역폭을 낭비하고 있습니다. !
후자의 경우, 당신은 무언가에있을 수 있습니다. 매우 큰 파일의 SHA1 해시는 단지 몇 바이트이며 큰 파일 크기의 작은 부분을 나타냅니다. 모든 파일 O(n^2)
의 해시 를 다운로드하고 다운로드 할 파일을 결정하기 위해 해시 를 비교 하는 것이 상당히 실용적 입니다. 그러나 이러한 비교를 수행하는 동안 서버에서 파일 데이터가 변경되는 경우 여전히 경쟁 조건 문제가 발생하므로 중요한 경우 동기화를 고려해야합니다.
결론 :
- 경우 당신은 WebDAV 서버를 완벽하게 소프트웨어 제어를 가지고 구성을 변경할 수 없습니다하지 않습니다, 당신은 당신이 이미 동일한 사본이 있는지 여부를 결정 꽤 많이 운 (TM)의 밖으로 파일 내용을 여러에 저장됩니다 서버에서 파일을 제외하고 서버 관리자가 이미 해시 값에 의존 할 수 있는지 당신에게 성공을 어느 정도 허용 할 수 있습니다 서버의 모든 파일에 대한 해시 파일이 어떤 종류의 가능을합니다.
- 경우 당신이 할 수 는 WebDAV 서버를 완벽하게 소프트웨어 제어를 가지고있는 수 의 구성을 변경하려면 스크립트 나 프로그램을 작성 할 수 있습니다 (또는 이미 하나를 사용) 예와 같은 확장과 해시 파일을 만들
.sha1sum
에 WebDAV 서버가 호스트하는 모든 파일과 동일한 디렉토리. 이렇게하면 파일 크기가 몇 킬로바이트 이상이라고 가정하면 해시 만 다운로드하여 파일 크기와 비교할 때 상대적으로 적당한 대역폭 비용으로 비교할 수 있습니다.