Bagaimana cara menghapus file duplikat dengan fdupes?

15

Ketika saya menjalankannya fdupesmenemukan lebih dari 30.000 file duplikat. Saya perlu menyimpan satu file dan menghapus semua duplikat lainnya (karena beberapa di antaranya adalah file sistem). Tolong beri saya perintah atau skrip untuk melakukan ini tanpa menekan "1 atau 2 atau semua" untuk masing-masing dan setiap kelompok file duplikat.

pengguna84055
sumber

Jawaban:

23

Anda dapat melakukan ini jika Anda ingin menjalankan ini secara diam-diam (Saya baru saja menggunakannya untuk menghapus 150 GB dupes yang berjalan pada penyimpanan rackspace block .. £ kerching !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
pengguna288359
sumber
Apakah tidak ada opsi yang akan pindah ke sampah daripada menghapus dupes?
Augustin Riedinger
2
Apakahfor f in $(fdupes -f .); do gvfs-trash $f; done
Augustin Riedinger
2
@AugustinRiedinger: Lebih baik lagi fdupes -f . | xargs -rd '\n' -- gvfs-trashjika Anda memiliki nama file dengan spasi dan karakter khusus atau banyak file.
David Foerster
@ DavidFoerster Anda mungkin masih memiliki nama file dengan baris baru, yang akan merusak perintah Anda.
Ruslan
@Ruslan: Itu benar tetapi saat fdupesini tidak memberikan opsi untuk catatan yang diakhiri dengan nol, jadi tidak ada opsi yang lebih baik. Ini jelas jauh lebih baik daripada itu for f in $(fdupes ...). : -]
David Foerster
9

fdupes memiliki CLI yang kaya:

fdupes -r ./stuff > dupes.txt

Kemudian, menghapus duplikat semudah memeriksa dupes.txtdan menghapus direktori yang menyinggung. fdupesjuga dapat meminta Anda untuk menghapus duplikat saat Anda melanjutkan.

fdupes -r /home/user > /home/user/duplicate.txt

Output dari perintah masuk duplicate.txt.

fdupes akan membandingkan ukuran dan hash MD5 file untuk menemukan duplikat.

Periksa halaman fdupesmanual untuk info penggunaan terperinci.

Penjualan Amol
sumber
Saya menemukan jalan. ya 1 | fdupes -rd / mnt / hda5 / midi_files
user84055
2

Saya akan menggunakan cara yang lebih aman ini:

Buat skrip dan pindahkan file yang digandakan ke folder baru. Jika Anda pindah ke folder di luar folder asli, fdupes tidak akan melaporkan file yang digandakan pada pemindaian kedua, dan akan lebih aman untuk menghapusnya.

#!/bin/bash

# Save default separator definitions
oIFS=$IFS
# define new line as a separator, filenames can have spaces
IFS=$'\n';

# For each file (f) listed as duplicated by fdupes, recursively
  for f in `fdupes -r -f .`
  do
    # Log the files I'm moving
    echo "Moving $f to folder Duplicates" >> ~/log.txt
    # Move the duplicated file, keeping the original in the original folder
    mv $f Duplicates/
  done

# restore default separator definitions
IFS=$oIFS
LinuxHelper
sumber
1

Saya telah menggunakan fslint dan DupeGuru untuk beberapa waktu.

  • FSlint mendukung pemilihan dengan wildcard dan metode pembersihan lainnya
  • DupeGuru mendukung regex

Keduanya dapat menangani> 10.000 file / folder

seb
sumber