서로 다른 두 디렉터리에서 중복 파일을 제거하는 방법은 무엇입니까?

서로 다른 두 디렉터리에서 중복 파일을 제거하는 방법은 무엇입니까?

두 디렉터리에서 중복 파일을 제거하고 싶습니다. 디렉토리와 파일 구조는 다음과 같습니다

    nijat@nijat-virtual-machine:~/mansoor$ mkdir dir1
    nijat@nijat-virtual-machine:~/mansoor$ mkdir dir2
    nijat@nijat-virtual-machine:~/mansoor$ ls
    dir1  dir2
    nijat@nijat-virtual-machine:~/mansoor$ cd dir1
    nijat@nijat-virtual-machine:~/mansoor/dir1$ touch myfile.txt
    nijat@nijat-virtual-machine:~/mansoor/dir1$ ls
    myfile.txt
    nijat@nijat-virtual-machine:~/mansoor/dir1$ cd ..
    nijat@nijat-virtual-machine:~/mansoor$ cd dir2
    nijat@nijat-virtual-machine:~/mansoor/dir2$ touch myfile.txt
    nijat@nijat-virtual-machine:~/mansoor/dir2$ ls
    myfile.txt

및 에서 중복 dir1파일을 제거해 보았습니다 dir2. 이를 위해 다음 명령을 작성했습니다.

nijat@nijat-virtual-machine:~/mansoor$ fdupes -d dir1 -r dir2
[1] dir1/myfile.txt                     
[2] dir2/myfile.txt

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

   [+] dir1/myfile.txt
   [+] dir2/myfile.txt

nijat@nijat-virtual-machine:~/mansoor$ fdupes -d dir1 -r dir2
[1] dir1/myfile.txt                     
[2] dir2/myfile.txt

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

   [+] dir1/myfile.txt
   [-] dir2/myfile.txt

nijat@nijat-virtual-machine:~/mansoor$ cd dir1
nijat@nijat-virtual-machine:~/mansoor/dir1$ ls
myfile.txt
nijat@nijat-virtual-machine:~/mansoor/dir1$ cd ..
nijat@nijat-virtual-machine:~/mansoor$ cd dir2
nijat@nijat-virtual-machine:~/mansoor/dir2$ ls
nijat@nijat-virtual-machine:~/mansoor/dir2$ 

하지만 문제는 두 디렉터리에서 이 두 파일을 삭제하기 위해 어떤 옵션을 선택해야 하는지 알 수 없다는 것입니다.

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

예를 들어 모든 파일을 삭제하는 모든 옵션을 제공했지만 아무 일도 일어나지 않았습니다. 선택하면 1파일이 삭제되지만 dir1 파일은 남아 있습니다. dir2 선택하면 2파일이 삭제되지만 dir2삭제되지는 않습니다 dir1.

또한 나에게 묻지 않고 두 디렉터리에서 두 파일을 모두 삭제해 보았습니다. 나는 다음 명령을 사용합니다

  nijat@nijat-virtual-machine:~/mansoor$ fdupes -dN dir1 -r dir2
                                        
   [+] dir1/myfile.txt
   [-] dir2/myfile.txt

nijat@nijat-virtual-machine:~/mansoor$ cd dir2
nijat@nijat-virtual-machine:~/mansoor/dir2$ ls
nijat@nijat-virtual-machine:~/mansoor/dir2$ cd ..
nijat@nijat-virtual-machine:~/mansoor$ cd dir1
nijat@nijat-virtual-machine:~/mansoor/dir1$ ls
myfile.txt

보시다시피 내 파일은 여전히 ​​에 있습니다 dir1. 이 문제를 해결하도록 도와주세요. 확인 없이 두 디렉터리에서 두 파일을 모두 삭제하고 싶습니다.

답변1

프롬프트를 오해했습니다 fdupes. "Keep"은 파일을 유지한다는 의미입니다.

귀하가 사용하고 있는 도구는 제거용으로 설계되지 않았습니다.둘 다/모두중복(이것은 의미가 있습니다 - 일반적으로 정보를 잃고 싶지 않습니다)

에서 man (1) fdupes:

-d --delete
         prompt user for files to preserve, deleting all others (see CAVEATS below)

-N --noprompt
         when  used together with --delete, 
         preserve the first file in each set of duplicates 
         and delete the others without prompting the user

답변2

나는 두 디렉터리에서 이 두 파일을 삭제할 수 있는 도구에 대해 들어본 적이 없습니다. Guntbert가 그의 답변에서 말했듯이 목표는 공간을 줄이면서 정보를 잃지 않는 것입니다.

이전 답변에 대한 귀하의 의견에 따르면 이것이 귀하가 원하는 것입니다. 한 가지 방법은 다음과 같습니다.

find dir1 dir2 -type f -print0 | xargs -0 md5sum | sort | uniq -w32 -D | cut -c35-

이 명령은 파일 목록만 생성하며 실제로 삭제하지는 않습니다. | xargs -o -d '\n' rm제거하려면 추가 (Linux로 가정)하세요. 물론 먼저 테스트해 보세요.

궁금한데 왜 중복된 파일(원본 파일 포함)만 제거하고 다른 파일과 중복되지 않은 파일은 제거하지 않겠습니까? 아무리 노력해도 이 다소 특이한 요구 사항에 대한 사용 사례를 생각해낼 수 없습니다.

관련 정보