사실 저는 두 가지 다른 일을 하려고 노력하고 있어요.
첫 번째는 중복 항목을 제외하고 모든 비디오 파일, 사진 및 문서를 여행용 하드 드라이브에 복사하는 것이었습니다. 그래서 여행용 하드 드라이브에는 사본이 하나만 있습니다. 여러 수준의 폴더(ntfs 파일 시스템)를 볼 수 있어야 합니다. 두 번째는 원본 파일의 복사본을 소스에, 복사본을 여행용 드라이브에 남겨두고 소스에서 중복된 파일을 모두 제거하면서 이러한 모든 파일의 복사본을 전송하는 것입니다. 이는 서로 다른 두 시스템에 대한 것이므로 두 개의 유사한 요청이
특정 파일 형식(인코딩 비교 또는 .xyz 확장자를 통해)으로 제한하고 파일이 해시되어 중복이 있는지 확인하고 싶습니다.
내 필요는 중복 파일 찾기 기능과 다른 미디어로의 자동 전송/복사를 결합하는 것입니다...바람직하게는 한 단계에서.
그런 도구가 있나요? 아니면 명령줄을 사용하여 이 작업을 어떻게 수행합니까?
답변1
fdupes
한 가지 아이디어는 및 의 조합을 사용하는 것입니다 rsync
.
- 전송을 고려 중인 모든 파일에 대한 준비 영역을 만드는 데 사용됩니다
rsync
. - 준비 영역에 있는 항목을 제외한 모든 중복 항목을 제거합니다(만).
- 다시 사용하세요. 스테이징의 나머지 파일을 대상으로 전송하세요
rsync
.
이를 위해서는 세 가지 위치가 필요합니다.
- 원본 파일, 디렉토리 경로는
$origdir
. - 스토리지 캐시,
$stagingdir
. - target, 의 로컬 또는 원격 경로입니다
$destdir
.
먼저 준비 영역을 만듭니다(이것은 준비 영역이 아직 존재하지 않거나 존재하는 경우 전송해야 할 항목만 포함한다고 가정합니다).
rsync --archive --verbose --link-dest="$origdir" \
--include="*.jpg" --include="*/" --exclude="*" \
"$origdir/" "$stagingdir"
.jpg
그러면 원래 위치에서 하드 링크가 생성되어 이름으로 끝나는 모든 파일이 준비 영역에 복사됩니다. 디렉토리 구조를 생성하는 데는 공간만 필요하며 파일 데이터는 중복되지 않습니다( $stagingdir
및 $origdir
두 개의 다른 파티션에 있지 않는 한). 추가 파일 이름 패턴을 추가하려면 더 많은 --include
옵션(앞으로이것 --exclude
).
그런 다음 fdupes
다음을 실행하십시오 $stagingdir
.
fdupes --delete --recurse "$stagingdir"
삭제하기 전에 대화식으로 확인을 요청합니다. --noprompt
확인 없이 파일을 삭제하는 옵션 도 있습니다. fdupes
설명서를 읽어주세요주의 깊은. $origdir
준비 영역에서 파일을 삭제해도 아래 파일에는 영향을 미치지 않습니다.
그런 다음 준비 디렉터리에서 빈 디렉터리를 삭제합니다(이는 추가 단계이며 약간만 정리합니다).
find "$stagingdir" -type d -empty -delete -print
그러면 전체 준비 영역을 탐색하고 빈 디렉터리가 모두 제거됩니다. 성공적으로 삭제되면 삭제된 디렉터리가 모두 인쇄됩니다.
마지막으로 중복되지 않은 항목을 전송합니다.
rsync --archive --verbose "$stagingdir/" "$destdir"
이 프로세스는 첫 번째 프로세스에서 사용된 패턴과 일치하는 파일의 원래 디렉터리 구조를 보존하고 중복 항목이 제거된 rsync
후에도 그대로 유지됩니다 .fdupes