![다운로드가 속이지 않았는지 확인하세요](https://rvso.com/image/1345267/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%EA%B0%80%20%EC%86%8D%EC%9D%B4%EC%A7%80%20%EC%95%8A%EC%95%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EC%84%B8%EC%9A%94.png)
WebDav 서버의 특정 위치로 파일 디렉터리를 (반복적으로) 다운로드하고 싶습니다. 파일이 이미 존재하는 경우(어딘가에) 다시 다운로드되지 않습니다. 그러나 폴더 구조는 동일하지 않습니다.
그렇게 하는 쉬운 방법이 있나요? fdupes를 살펴봤지만 단지 dupes 탐지 및 삭제용일 뿐입니다. 파일이 매우 커서 오버헤드가 너무 커집니다.
대상 파일 시스템은 중복 제거를 지원하지 않습니다. (FUSE 마운트 지점에서) 기존 파일을 덮어쓰지 않을 것이라는 것을 알고 있지만 cp -n
폴더 구조는 동일하지 않습니다. 그래서 나는 일종의 붙어 있습니다.
답변1
보는 것부터WebDAV에 사용 가능한 Linux 클라이언트, 내가 선호하는 방법은 다음과 같습니다.
GVFS 또는 WebDAV 파일 시스템 모듈(davfs2 또는 fusedav) 중 하나를 사용하여 원격 WebDAV 서버의 파일을 로컬 파일 시스템 경로에 "매핑"합니다.
내장된 기능을 사용하세요CP명령을 사용하여
-n
대상의 파일을 "클러버하지 않음"으로 지시하는 옵션을 사용합니다. Ubuntu 와 같은 특정 셸은 기본적으로 버전을dash
실행하며 이 내장 기능은 해당 옵션을 지원하지 않을 수 있습니다. 최상의 결과를 얻으려면 또는 (특정 시스템의 바이너리 위치에 따라)을 실행하여 GNU Coreutils 버전을 실행하고 있는지 확인하십시오 .builtin
cp
-n
cp
/bin/cp
/usr/bin/cp
편집 : 원래 질문을 잘못 읽었습니다.
내 생각에 당신이 말하는 것은 file1.txt
WebDAV 서버의 두 가지 다른 경로에 파일이 존재하는 상황이 있다는 것입니다.내용물그 두 파일 중 정확히 동일합니다. 그리고 이미 파일 복사본이 하나 있는데 대역폭을 낭비하기 때문에 파일의 두 번째 또는 세 번째 복사본을 다운로드하고 싶지 않으십니까?
잘,클라이언트 측에서, 이것은 매우 어려울 것입니다. 이유는 다음과 같습니다.
당신은 봐야한다당신이 비교하는 것파일이 고유한지 확인하고요구사항/비용그 비교를 하려고요.
나추정(잘못) 당신이 비교한 것은길WebDAV 폴더 구조의 루트를 기준으로 합니다. 경로 동일성 비교를 수행하는 비용은 매우 쉽습니다. 와 같은 두 경로 문자열을 보고 /dir1/dir2/file1.txt
문자열이 일치하는지 확인하기만 하면 됩니다. 그렇다면 중복입니다. 그렇지 않다면 그렇지 않습니다.
비교할 수 있는 또 다른 것은 파일입니다.이름, 무시길. 예를 들어 다음 두 파일 이 중복된다고 생각하시겠습니까 /dir1/dir2/file1.txt
? /dir3/dir4/file1.txt
글쎄, 만약 당신이오직을 기준으로 비교이름이면 중복으로 간주됩니다. 그러나 사용 사례에 적합한 테스트를 만들기 위해 원하는 대로 다양한 복제 테스트를 혼합하고 일치시킬 수 있습니다.
비교하기에 덜 유용한 기타 속성은 다음과 같습니다.파일 크기,속성(또한 ~으로 알려진메타데이터), 파일 확장자 등 이러한 것들은 중복 판단력 측면에서 그다지 많은 것을 제공하지 않습니다. 대부분의 경우 다른 파일과 속성은 동일하지만 내용이 완전히 다른 파일을 구성하기 쉽기 때문입니다. , 대부분의 사람들은 내용이 다르면 두 파일을 중복으로 간주하지 않습니다.
제 생각에는 비교할 수 있는 가장 중요한 것은 파일입니다.내용물. 불행하게도 WebDAV 클라이언트의 관점에서는 파일을 이미 다운로드하기 전까지는 파일 내용을 알 수 있는 방법이 없습니다. 그리고 클라이언트의 경우 파일 전송 중이나 후에 파일 내용이 변경될 수 있으며, 이 경우 파일을 다시 다운로드하면 중복 비교 결과가 변경됩니다.
파일 내용을 비교하는 두 가지 기본 방법이 있습니다.바이트 대 바이트, 그리고해싱. 바이트 단위는 중복을 확인하는 가장 "보장된" 방법이지만 비교해야 한다는 제한이 있습니다.전체 파일, 이는 대량의 데이터에 대해 엄청나게 느립니다. 또한 중복 감지의 기본 알고리즘 복잡성은 입니다 O(n^2)
. 이는 중복 여부를 확인하기 위해 각 파일의 내용을 다른 파일의 내용과 비교해야 함을 의미합니다. 암호화 해시를 사용하여 파일을 비교하면 비교하거나 전송해야 하는 데이터의 양을 크게 줄일 수 있지만, 두 파일이 실제로 일치할 가능성이 극히 적다는 단점이 있습니다.다른하지만 동일한 해시를 가집니다. 이를 해시 충돌이라고 합니다.
그러나 다시,고객관점에서는 알 수 없다.무엇다음 중 하나를 수행하지 않는 한 파일 내용은 심지어 해시입니다.
- 서버에서 파일을 다운로드합니다. 또는
- 서버가 로컬에서 해시 값을 계산하도록 설득한 다음 해시를 다운로드합니다.
전자의 경우 파일 다운로드를 피하기 위해 파일이 중복되었는지 확인하기 위해 파일을 다운로드하므로 그렇게 할 수 없습니다. 피하려는 대역폭을 낭비하게 됩니다.단지 비교를 수행하기 위해!
후자의 경우에는 뭔가를 하고 있을 수도 있습니다. 매우 큰 파일의 SHA1 해시는 단지 몇 바이트에 불과하며 큰 파일 크기의 아주 작은 부분을 나타냅니다. 모든 파일의 해시를 O(n^2)
다운로드 하고해시다운로드할 파일을 결정합니다. 하지만 이러한 비교를 수행하는 동안 서버의 파일 데이터가 변경되면 여전히 경쟁 조건 문제가 발생하므로 중요한 경우 동기화를 고려해야 합니다.
그래서 결론:
- 만약에WebDAV 서버에 대한 완전한 소프트웨어 제어 권한이 없고 해당 구성을 변경할 수 없는 경우, 동일한 서버의 복사본이 이미 있는지 확인하는 데 거의 운이 없습니다(tm).파일 내용서버의 여러 파일에 저장되어 있으며,~하지 않는 한서버 관리자는 이미 서버의 모든 파일에 대해 일종의 해시 파일을 제공하므로 해시 값에 의존할 수 있다면 어느 정도 성공할 수 있습니다.
- 만약에너하다WebDAV 서버에 대한 완전한 소프트웨어 제어권을 갖고 있으며할 수 있는구성을 변경하려면 스크립트나 프로그램을 작성하여(또는 이미 사용 가능한 것을 사용하여) 확장자를 가진 해시 파일을 생성할 수 있습니다. 예를 들어
.sha1sum
WebDAV 서버가 호스팅하는 모든 파일과 동일한 디렉터리에 있습니다. 이를 통해 파일 크기가 몇 킬로바이트 이상이라는 가정 하에 파일 크기에 비해 상대적으로 적당한 대역폭 비용으로 해시만 다운로드하고 비교할 수 있습니다.