Làm thế nào để xóa các tập tin trùng lặp với fdupes?


13

Khi tôi chạy, fdupesnó tìm thấy hơn 30.000 tệp trùng lặp. Tôi cần giữ một tệp và xóa tất cả các bản sao khác (vì một số trong số chúng là tệp hệ thống). Vui lòng cho tôi một lệnh hoặc tập lệnh để thực hiện việc này mà không cần nhấn "1 hoặc 2 hoặc tất cả" cho mỗi và mọi nhóm tệp trùng lặp.

Câu trả lời:


21

Bạn có thể làm điều này nếu bạn muốn chạy nó một cách im lặng (Tôi vừa sử dụng nó để xóa 150 GB bản sao đang chạy trên bộ lưu trữ khối rackspace .. £ kerking !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)

Không có tùy chọn nào có thể chuyển sang thùng rác thay vì xóa bản sao?
Augustin Riedinger

1
Đã làmfor f in $(fdupes -f .); do gvfs-trash $f; done
Augustin Riedinger

2
@AugustinRiedinger: Sẽ tốt hơn nữa fdupes -f . | xargs -rd '\n' -- gvfs-trashnếu bạn có tên tệp có dấu cách và ký tự đặc biệt hoặc nhiều tệp.
David Foerster

@DavidFoerster bạn vẫn có thể có tên tệp với dòng mới, điều này sẽ phá vỡ lệnh của bạn.
Ruslan

@Ruslan: Điều đó đúng nhưng hiện tại fdupeskhông cung cấp tùy chọn cho các bản ghi bị chấm dứt null, vì vậy không có lựa chọn nào tốt hơn. Nó chắc chắn tốt hơn nhiều so với for f in $(fdupes ...)mặc dù. : -]
David foerster

9

fdupes có CLI phong phú:

fdupes -r ./stuff > dupes.txt

Sau đó, xóa các bản sao dễ dàng như kiểm tra dupes.txtvà xóa các thư mục vi phạm. fdupescũng có thể nhắc bạn xóa các bản sao khi bạn đi cùng.

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

Đầu ra của lệnh đi vào duplicate.txt.

fdupes sẽ so sánh kích thước và hàm băm MD5 của các tệp để tìm các bản sao.

Kiểm tra fdupestrang web để biết thông tin sử dụng chi tiết.


Tôi tìm được một cách. có 1 | fdupes -rd / mnt / hda5 / midi_files
user84055


2

Tôi sẽ sử dụng cách an toàn hơn:

Tạo một tập lệnh và di chuyển các tập tin trùng lặp vào một thư mục mới. Nếu bạn di chuyển đến một thư mục bên ngoài thư mục gốc, fdupes sẽ không báo cáo các tệp trùng lặp trong lần quét thứ hai và sẽ an toàn hơn khi xóa chúng.

#!/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

1

Tôi đã sử dụng fslintDupeGuru khá lâu.

  • FSlint hỗ trợ lựa chọn bằng ký tự đại diện và các phương pháp dọn dẹp khác
  • DupeGuru hỗ trợ regex

Cả hai đều có thể xử lý> 10000 tệp / thư mục

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.