나는 친구 컴퓨터에 대한 아주 오래된 백업을 2개 가지고 있습니다. 단순히 외장 하드 드라이브의 모든 폴더에 복사됩니다. 둘 다 크기가 약 300GB이고 내용이 매우 유사하지만 동일하지는 않으며 폴더 구조도 다릅니다. 해당 공간을 확보하고 두 공간을 모두 백업하고 싶습니다. 파일의 90% 정도가 중복이라고 생각하는데, 중복되지 않은 파일도 놓치고 싶지 않습니다.
그래서 두 디렉터리와 모든 하위 디렉터리의 파일을 비교하지만 해당 하위 디렉터리는 무시하는 프로그램이 필요합니다. 폴더 A의 모든 파일은 폴더 B의 모든 파일과 비교되어야 합니다. 폴더 B의 모든 중복 항목은 표시/이동(/삭제)되어야 합니다. 나머지는 폴더 B에서 수동으로 처리하겠습니다.
나는 멜드를 시도했고, Gnome-Commander도 시도했습니다. (나는 XFCE와 함께 Xubuntu를 사용합니다)
저는 GUI 솔루션을 선호하지만 터미널과 스크립트도 처리할 수 있어야 합니다. 나는 양쪽에 대한 파일 목록을 작성하고 이를 일부 diff 프로그램에 파이프하는 것이 가능할 것이라고 생각하지만 이를 정확히 수행하는 방법은 내 능력을 벗어납니다.
글쎄요, Turtle Purple님의 답변을 기대하고 있습니다.
답변1
파일 내용을 보존(데이터 손실 방지)하는 것이 목표라면 파일 디렉터리 이름 지정보다는 파일 평등에 중점을 둘 것입니다.
먼저 각 최상위 폴더에서 이 명령을 실행한 다음 출력을 저장합니다(한동안 실행됩니다!).
find FolderA -type f -print0 | xargs -0 cksum > FoldA.cksum
find FolderB -type f -print0 | xargs -0 cksum > FoldB.cksum
동일한 파일 내용이 모두 함께 있도록 두 출력을 함께 정렬합니다. 그런 다음 awk 작성을 시작하여 처음 두 필드(체크섬 및 크기)를 기반으로 동일한 콘텐츠를 그룹화합니다.
(a) 단일 라인 그룹만 저장되는 파일입니다.
(b) 더 큰 그룹은 동일한 파일의 목록입니다. 맨 위 이름을 유지하고 다른 이름을 삭제 목록에 기록하는 것이 좋습니다(이 이름은 A와 B 사이, A 내, B 내 또는 둘 다 내에서 중복될 수 있습니다.
이제 모든 중복 파일은 "FolderA" 이름에만 있고 고유 파일의 약 절반도 "FolderA" 이름에 있습니다. FolderB에서 선택한 파일 복사본을 어떻게 처리합니까(나머지 콘텐츠를 병합해야 한다고 가정)?
해당 경로 이름(FolderB에서 가장 낮은 디렉터리까지)이 FolderA에 있는 경우 다른 출력 목록을 통해 경로 이름을 해당 경로로 이동해야 할 수도 있습니다.
FolderA에 해당 경로 이름이 존재하지 않으면 실제로 어디에 속하는지 추측할 수 없습니다. 적절한 디렉토리(및 모든 상위 디렉토리)를 생성하고 이를 잃을 위험이 있거나 다른 위치에 해당하는지 감시할 수 있습니다.
이 마지막 단계 모두 추가 확인이 필요합니다. 동일한 이름을 가진 두 개 이상의 다른 파일이 있을 가능성이 있습니다. 이 경우 몇 가지 해결 방법(예: 항상 더 높은 버전 유지)을 선택하거나 파일 이름을 확장하여 고유하게 만들거나 각 사례를 개별적으로 확인해야 합니다.
내 접근 방식은 이 단계를 단계별로 수행하는 것입니다. 먼저 정확한 중복 파일(90% 추정)을 처리한 다음 나머지를 조정하는 데 사용할 수 있는 패턴의 차이점을 평가합니다.
답변2
한 디렉토리를 다른 디렉토리로 복사하고 동일한(경로 기준) 파일을 무시/바꾸는 것과 같은 간단한 작업을 수행하십시오. 중복된 항목(다른 경로, 동일한 파일 이름)이 생성되면 나중에 찾아볼 수 있습니다.
"gui" 솔루션을 원하시나요? 사용MC. 중복된 항목을 어떻게 처리할지 묻는 메시지가 표시되면 "업데이트" 또는 "크기가 다른 경우"를 선택할 수 있습니다.
또는 zip/7z/rar/tar와 같은 아카이버를 사용하여 dir1을 아카이브로 패키징하고 dir2로 업데이트하세요. 이렇게 하면 중복이 방지되고 업데이트된 백업이 제공됩니다.
추신.
recursively ignoring sub-directories
모순적이다. 아직 명확하지 않으니 설명해 주실 수 있나요?