두 디렉터리를 비교하고 중복 파일을 제거하는 방법

두 디렉터리를 비교하고 중복 파일을 제거하는 방법

두 디렉토리에서 이름, 크기, 유형이 같은 파일을 검색하고 이 디렉토리 중 하나에서 파일을 삭제하려면 어떻게 해야 합니까?

답변1

사용 fdupes:

fdupes --delete dir1 dir2

fdupes파일 이름이나 파일 형식은 테스트되지 않지만 파일 크기와 내용은 테스트됩니다(암시적으로 파일 형식 포함).

예:

$ mkdir dir1 dir2

$ touch dir{1,2}/{a,b,c}

$ tree
.
|-- dir1
|   |-- a
|   |-- b
|   `-- c
`-- dir2
    |-- a
    |-- b
    `-- c

2 directories, 6 files

$ fdupes --delete dir1 dir2
[1] dir1/a
[2] dir1/b
[3] dir1/c
[4] dir2/a
[5] dir2/b
[6] dir2/c

Set 1 of 1, preserve files [1 - 6, all]: 1

   [+] dir1/a
   [-] dir1/b
   [-] dir1/c
   [-] dir2/a
   [-] dir2/b
   [-] dir2/c

$ tree
.
|-- dir1
|   `-- a
`-- dir2

2 directories, 1 file

답변2

나는 2개의 디렉토리 p1과 p2를 예로 들어 보겠습니다.

먼저 p1 및 p2 디렉터리 파일 이름의 출력을 2개의 출력 파일에 저장합니다.

find /root/p1 -type f |awk -F "/" '{print $NF}'   > /var/tmp/P1_file.txt

 find /root/p2 -type f |awk -F "/" '{print $NF}'   > /var/tmp/P2_file.txt

이제 두 디렉터리 모두에서 공통 파일 이름을 찾아서 그 중 하나에서 삭제하겠습니다. /root/p1에서 중복된 파일을 삭제하고 /root/p2에 파일을 보관하고 싶습니다.

awk 'NR==FNR {a[$1];next}($1 in a) {print $1}' /var/tmp/P1_file.txt /var/tmp/P2_file.txt  |awk '{print "rm -rvf" " " "/root/p1/"$1}' | sh

테스트를 거쳐 잘 작동함

답변3

dircmp많은 Unix에 존재하는 명령을 사용하는 것이 좋습니다 .

바라보다:

man dircmp

-d옵션이 가장 적합하다고 생각되는 옵션인 것 같습니다.

dircmp -d dir1 dir2

dir1및 의 내용을 비교 하고 유사한 출력을 dir2표시합니다 .diff

답변4

린트이를 수행하는 옵션은 다음과 같습니다.

rmlint -T duplicates --match-basename --keep-all-tagged --must-match-tagged /duplicates // /originals

("//" 구분 기호는 "표시" 경로를 식별합니다.--모든 태그 유지그리고--태그와 일치해야 함스위치)

중복이 발견되면린트실행 가능한 스크립트 생성rmlint.sh(확인 후) 실행하여 중복 항목을 제거할 수 있습니다.

관련 정보