Как fdupes определяет, какой файл сохранить, а какой удалить из набора повторяющихся файлов, хранящихся на диске?

Я только что скачал fdupes и пробовал. Мне любопытно узнать, как программа собирается определить, какой файл будет помещен первым при обнаружении нескольких файлов. Я бегу:

Distributor ID: Ubuntu
Description:    Ubuntu 12.04.3 LTS
Release:        12.04
Codename:       precise

Вот команда, которую я выполнил.

fdupes -Nrd /backup/local/fileserver_backup/home

В этом «домашнем» каталоге есть два каталога с одинаковым содержимым (я использовал cp -r ./sam ./sam1):

sam / ...

sam1 / ...

С помощью приведенной выше команды я обнаружил, что все файлы были оставлены в sam . Но когда я попытался выполнить ту же команду со следующей структурой каталогов:

sa / ...

сэм / ...

Я обнаружил, что все файлы остались в sam , а не в sa , как я ожидал.

Теперь мои вопросы:

  • Всегда ли fdupes хранит самый старый файл?
  • Как он сортирует файлы при поиске первого и все последующие дубликаты?
  • Зависит ли эта ОС?
  • Это то, что пользователь может контролировать?

У меня есть около 300000 строк дубликатов файлов. Будучи способным предоставить программному обеспечению некоторые рекомендации, такие как: «всегда сохраняйте файлы в этом каталоге, когда есть возможность выбора, пропустите, если они недоступны», или что-то подобное, было бы отличным дополнением.

1
задан 11 January 2014 в 22:15

2 ответа

Вот тест, который я выполнил:

$ ls -lt -u -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample3.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 002/sample2.mp3
$ ls -lt -c -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan  9 23:39 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 00:14 001/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 00:20 002/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 01:02 001/sample3.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 01:08 001/sample.mp3
$ ls -t -1r */*.mp3
001/sample0.mp3
001/sample3.mp3
001/sample2.mp3
002/sample2.mp3
001/sample.mp3
$ fdupes -r . | grep mp3
./001/sample0.mp3
./001/sample3.mp3
./001/sample2.mp3
./002/sample2.mp3
./001/sample.mp3
$ touch -a 001/sample2.mp3 
$ ls -lt -u -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample3.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 002/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 22:29 001/sample2.mp3
$ ls -lt -c -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan  9 23:39 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 00:20 002/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 01:02 001/sample3.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 01:08 001/sample.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 22:29 001/sample2.mp3
$ ls -t -1r */*.mp3
001/sample0.mp3
001/sample3.mp3
001/sample2.mp3
002/sample2.mp3
001/sample.mp3
$ fdupes -r . | grep mp3
./001/sample0.mp3
./001/sample3.mp3
./001/sample2.mp3
./002/sample2.mp3
./001/sample.mp3
$ touch -m 001/sample3.mp3 
$ ls -lt -u -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 001/sample3.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 11:49 002/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 22:32 001/sample2.mp3
$ ls -lt -c -r */*.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan  9 23:39 001/sample0.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 00:20 002/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 10 01:08 001/sample.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 22:29 001/sample2.mp3
-rwxrwxr-x 1 hash hash 3416208 Jan 11 22:34 001/sample3.mp3
$ ls -t -1r */*.mp3
001/sample0.mp3
001/sample2.mp3
002/sample2.mp3
001/sample.mp3
001/sample3.mp3
$ fdupes -r . | grep mp3
./001/sample0.mp3
./001/sample2.mp3
./002/sample2.mp3
./001/sample.mp3
./001/sample3.mp3
$ fdupes -rd ./001/ ./002/
[1] ./001/sample0.mp3                 
[2] ./001/sample2.mp3
[3] ./002/sample2.mp3
[4] ./001/sample.mp3
[5] ./001/sample3.mp3

Set 1 of 1, preserve files [1 - 5, all]: 4

   [-] ./001/sample0.mp3
   [-] ./001/sample2.mp3
   [-] ./002/sample2.mp3
   [+] ./001/sample.mp3
   [-] ./001/sample3.mp3

Заключение:

Дубликаты файлов отсортированы в обратном порядке последнего времени изменения. Так, первый файл в наборе дубликатов является самым старым с точки зрения времени изменения (mtime).

Это означает, используете ли Вы fdupes -rdN [directory] ..., файл с самым старым mtime в каждом наборе дубликатов будет сохранен, и остальные будут удалены.

Ссылки:

4
ответ дан 11 January 2014 в 22:15
  • 1
    Это doesn' t работа. Вот сообщение, которое я получил:: We apologize for the inconvenience, but Google Earth has crashed. This is a bug in the program, and should never happen under normal circumstances. A bug report and debugging data have been written to this text file: ~/.googleearth/crashlogs/crashlog-56b92700.txt – UserK 9 February 2016 в 02:44

Альтернатива rmdupe использует переключатель --ref /referencedir, который сохраняет любые дубликаты, найденные в справочном каталоге.

0
ответ дан 11 January 2014 в 22:15
  • 1
    @I рекомендуют изучить упомянутый файл ~/.googleearth/crashlogs/crashlog-56b92700.txt и искать подсказки там. Возможно, даже отправьте crashlog разработчикам Google Earth. – erik 11 February 2016 в 19:19

Другие вопросы по тегам:

Похожие вопросы: