Как найти файлы, которые не имеют дубликатов, в отдельном каталоге
У меня есть старая резервная копия документов. В моем нынешнем Documents
каталог, многие из этих файлов существуют в разных местах с разными именами. Я пытаюсь найти способ показать, какие файлы существуют в резервной копии, которые не существуют в Documents
каталог, желательно хороший и GUI-ы, чтобы я мог легко просматривать много документов.
Когда я ищу этот вопрос, многие люди ищут способы сделать обратное. Есть такие инструменты, как FSlint и DupeGuru, но они показывают дубликаты. Инвертного режима нет.
2 ответа
Если вы готовы использовать 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
из хранилища вселенной:
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
Я подумал, что лучший рабочий процесс для объединения старых резервных копий с тысячами файлов, заархивированных в разных каталогах с разными именами, это использовать DupeGuru в конце концов. Она очень похожа на вкладку " Дубликаты " из FSlint, но у нее есть очень важная функция добавления источников в виде "ссылки".
- Добавьте целевой каталог (например,
~/Documents
) в качестве ссылки.- Ссылка доступна только для чтения и файлы не будут удалены
- Добавьте каталог резервного копирования как обычно.
- Найти дубликаты. Удалите все дубликаты, найденные в резервной копии.
- Вы остались только с уникальными файлами в каталоге резервного копирования. Используйте FreeFileSync или Meld, чтобы объединить их или объединить вручную.
Если у вас есть несколько старых каталогов резервных копий, имеет смысл сначала объединить самый новый каталог резервных копий, как этот, а затем использовать этот каталог резервных копий в качестве справочного, чтобы очистить его дубликаты от более старых резервных копий, прежде чем объединять их с основным каталогом документов. Это экономит много работы, когда вам не нужно удалять уникальные файлы, которые вы хотите удалить, вместо слияния из резервных копий.
Не забудьте сделать новую резервную копию после того, как вы уничтожили все старые резервные копии в процессе.:)
У меня была такая же проблема с множеством очень больших файлов, и есть много решений для дубликатов, но не для обратного поиска, и я также не хотел искать различия контента из-за большого количества данных.
Итак, я написал этот скрипт на Python для поиска "изолированных файлов".
isolated-files.py --source folder1 --target folder2
это покажет любые файлы (рекурсивно) в папке2, которые не находятся в папке1 (также рекурсивно). Также может использоваться для ssh-подключений и с несколькими папками.