如何从两个不同的目录中删除重复的文件?

如何从两个不同的目录中删除重复的文件?

我想从两个目录中删除重复的文件。目录和文件的结构如下

    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:“保留”意味着保留该文件。

您使用的工具并非旨在删除两个都/全部重复项(这是有道理的 - 通常你不想丢失信息)

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)以删除它们。当然,请先进行测试。

出于好奇,为什么您只想删除重复的文件(包括原始文件)而不删除不与其他任何内容重复的文件?尽我所能,我无法为这个有点不寻常的需求想出一个用例。

相关内容