Как найти файлы, не имеющие дубликатов в отдельном каталоге

Как найти файлы, не имеющие дубликатов в отдельном каталоге

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

Когда я ищу этот вопрос, многие ищут способы сделать наоборот. Есть такие инструменты, какFSlintиDupeGuru, но они показывают дубликаты. Режима инвертирования нет.

решение1

Если вы готовы использовать CLI, вам подойдет следующая команда:

diff --brief -r backup/ documents/

Это покажет вам файлы, которые являются уникальными для каждой папки. Если вы хотите, вы также можете игнорировать регистры имен файлов с помощью--ignore-file-name-case

В качестве примера:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

Кроме того, если вы хотите сообщать только о различиях в файлах (а не о самих «различиях»), вы можете использовать --briefследующую опцию:

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

Есть несколько визуальных инструментов сравнения, которые meldмогут делать то же самое. Вы можете установить meldиз репозитория universe следующим образом:

sudo apt-get install meld

и используйте его опцию "Сравнение каталогов". Выберите папку, которую хотите сравнить. После выбора вы можете сравнить их бок о бок:

введите описание изображения здесь

fdupes— отличная программа для поиска дубликатов файлов, но она не выводит список недублированных файлов, а это то, что вы ищете. Однако мы можем вывести список файлов, которых нет в выводе, fdupesиспользуя комбинацию findи grep.

В следующем примере перечислены файлы, уникальные для backup.

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt

решение2

У меня была та же проблема с большим количеством очень больших файлов, и существует множество решений для дубликатов, но не для обратного поиска, и я также не хотел искать различия в контенте из-за большого объема данных.

Поэтому я написал этот скрипт на Python для поиска «изолированных файлов»

isolated-files.py --source folder1 --target folder2

это покажет все файлы (рекурсивно) в папке folder2, которые не находятся в папке folder1 (также рекурсивно). Также может использоваться в соединениях ssh и с несколькими папками.

видетьhttps://github.com/ezzra/isolated-files

решение3

Я решил, что лучший рабочий процесс для объединения старых резервных копий с тысячами файлов, заархивированных в разных каталогах с разными именами, — это использоватьdupeGuruВ конце концов. Это очень похоже надубликатывкладка изFSlint, но у него есть еще одна важная функция: добавление источников'ссылка'.

  1. Добавьте целевой каталог (например ~/Documents, ) какссылка.
    • Ассылкадоступен только для чтения, и никакие файлы не будут удалены
  2. Добавьте ваш резервный каталог какнормальный.
  3. Найти дубликаты. Удалить все дубликаты, найденные в резервной копии.
  4. У вас останутся только уникальные файлы в резервной папке. ИспользуйтеFreeFileSyncилиСлияниечтобы объединить их, или объединить вручную.

Если у вас есть несколько старых резервных каталогов, имеет смысл сначала объединить самый новый резервный каталог, как показано ниже, а затем использовать этот резервный каталог в качествессылкадля очистки его дубликатов из старых резервных копий перед их объединением в основной каталог документов. Это сохраняетмногоработы, при которой вам не придется удалять уникальные файлы, которые вы хотите удалить, вместо того, чтобы объединять их из резервных копий.

Не забудьте сделать новую резервную копию после того, как вы уничтожите все старые резервные копии. :)

решение4

jdupesдля этого есть две полезные опции: -I --isolateи -u --print-unique.

Например, чтобы вывести список только уникальных файлов в backupкаталоге:

jdupes -Iru Documents backup |grep '^backup

Связанный контент