2つの異なるディレクトリから重複ファイルを削除する方法は?

2つの異なるディレクトリから重複ファイルを削除する方法は?

両方のディレクトリから重複ファイルを削除したいと思います。ディレクトリとファイル構造は次のとおりです。

    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$ 

しかし、問題は、両方のディレクトリからこれらの2つのファイルを削除するためにどのオプションを選択する必要があるのか​​わからないことです。

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

私は両方のディレクトリからこれらの2つのファイルを削除できるツールについて聞いたことがありません。 Guntbertが彼の答えで言ったように、目標はスペースを減らしながら情報を失わないことです。

以前の回答に対するあなたの意見によると、これはあなたが望むものです。 1つの方法は次のとおりです。

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

このコマンドはファイルのリストのみを生成し、実際には削除しません。| xargs -o -d '\n' rm削除するには、追加(Linuxと仮定)してください。もちろん、まずテストしてみてください。

疑問に思うのに、なぜ重複したファイル(元のファイルを含む)だけを削除し、他のファイルと重複していないファイルを削除しないのですか?いくら努力しても、このやや珍しい要件のユースケースを思い出すことはできません。

関連情報