У меня есть старая резервная копия документов. В моем текущем 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 и с несколькими папками.
решение3
Я решил, что лучший рабочий процесс для объединения старых резервных копий с тысячами файлов, заархивированных в разных каталогах с разными именами, — это использоватьdupeGuruВ конце концов. Это очень похоже надубликатывкладка изFSlint, но у него есть еще одна важная функция: добавление источников'ссылка'.
- Добавьте целевой каталог (например
~/Documents
, ) какссылка.- Ассылкадоступен только для чтения, и никакие файлы не будут удалены
- Добавьте ваш резервный каталог какнормальный.
- Найти дубликаты. Удалить все дубликаты, найденные в резервной копии.
- У вас останутся только уникальные файлы в резервной папке. ИспользуйтеFreeFileSyncилиСлияниечтобы объединить их, или объединить вручную.
Если у вас есть несколько старых резервных каталогов, имеет смысл сначала объединить самый новый резервный каталог, как показано ниже, а затем использовать этот резервный каталог в качествессылкадля очистки его дубликатов из старых резервных копий перед их объединением в основной каталог документов. Это сохраняетмногоработы, при которой вам не придется удалять уникальные файлы, которые вы хотите удалить, вместо того, чтобы объединять их из резервных копий.
Не забудьте сделать новую резервную копию после того, как вы уничтожите все старые резервные копии. :)
решение4
jdupes
для этого есть две полезные опции: -I --isolate
и -u --print-unique
.
Например, чтобы вывести список только уникальных файлов в backup
каталоге:
jdupes -Iru Documents backup |grep '^backup