両方のディレクトリから重複ファイルを削除したいと思います。ディレクトリとファイル構造は次のとおりです。
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と仮定)してください。もちろん、まずテストしてみてください。
疑問に思うのに、なぜ重複したファイル(元のファイルを含む)だけを削除し、他のファイルと重複していないファイルを削除しないのですか?いくら努力しても、このやや珍しい要件のユースケースを思い出すことはできません。