두 디렉터리에서 중복 파일을 제거하고 싶습니다. 디렉토리와 파일 구조는 다음과 같습니다
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로 가정)하세요. 물론 먼저 테스트해 보세요.
궁금한데 왜 중복된 파일(원본 파일 포함)만 제거하고 다른 파일과 중복되지 않은 파일은 제거하지 않겠습니까? 아무리 노력해도 이 다소 특이한 요구 사항에 대한 사용 사례를 생각해낼 수 없습니다.