13

When I run fdupes it finds more than 30,000 duplicate files. I need to keep one file and delete all the other duplicates (because some of them are systemfiles). Please give me a command or script to do this without pressing "1 or 2 or all" for each and every group of duplicate files.

20

You can do this if you want to run this silently (I've just used it to clear 150 GB of dupes running on rackspace block storage ..£kerching!!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
  • Ain't there an option that would move to trash instead of deleting dupes? – Augustin Riedinger Mar 21 '16 at 14:04
  • 1
    Did for f in $(fdupes -f .); do gvfs-trash $f; done – Augustin Riedinger Mar 21 '16 at 14:12
  • 2
    @AugustinRiedinger: Even better would be fdupes -f . | xargs -rd '\n' -- gvfs-trash if you have file names with spaces and special characters or many files. – David Foerster Jun 3 '16 at 7:40
  • @DavidFoerster you still may have filenames with newlines, which will break your command. – Ruslan Oct 14 '16 at 11:44
  • @Ruslan: That's correct but at the moment fdupes doesn't provide an option for null-terminated records, so there's no better option. It's definitely much better than for f in $(fdupes ...) though. :-] – David Foerster Oct 14 '16 at 14:38
9

fdupes has a rich CLI:

fdupes -r ./stuff > dupes.txt

Then, deleting the duplicates was as easy as checking dupes.txt and deleting the offending directories. fdupes also can prompt you to delete the duplicates as you go along.

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

Output of the command goes in duplicate.txt.

fdupes will compare the size and MD5 hash of the files to find duplicates.

Check the fdupes manpage for detailed usage info.

1

I have used fslint and DupeGuru for quite some time.

  • FSlint supports selection by wildcard and other cleanup methods
  • DupeGuru supports regex

Both can handle >10000 files/folders

1

I would use this safer way:

Create a script and move the duplicated files to a new folder. If you move to a folder outside the original folder, fdupes won't report the duplicated files on a second scan, and it will be safer to delete them.

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.