1

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

Если структура папок совпадает, а файлы не были переименованы, вы можете использовать diff -r , meld или любой другой инструмент, который сравнивает папки (и он перестает работать, если вы переименуете файлы или даже каталоги).

Если вы просто палочка , чтобы найти дубликаты вы можете использовать такие инструменты , как duff или fdupes

Но - и это приводит к моему вопросу - я хотел бы проверить / запросить, если две папки имеют одинаковое содержимое на основе файлового содержимого (а не содержимого файла и пути к файлу, как в случае с diff) или вместо перечисления дубликатов, расположенных в заданном папка Я хочу получить файлы без по крайней мере одной копии где-нибудь в моей системе.

Возможный вывод инструмента может выглядеть так:

fuzzydiff folder1 folder2
Only in 1: folder1/img_1234.jpg
Only in 2: folder2/bali/very_nice_moment.jpg
Only in 2: folder2/pictures_of_me/favorite_picture.jpg

(в этом примере папки bali или pictures_of_me внутри folder2 не может даже существовать в folder так diff -r бы просто пропустить каталог)

Есть ли кто - нибудь с подобными потребностями / требованиями и кто нашел удобный и надежный способ для получения описанной информации о файловых системах с несколькими сотнями ГБ до нескольких ТБОВ эффективны?

Я работаю над системой Linux, поэтому предложенные подходы должны быть основаны на Posix и командной строке (для объединения / объединения результатов).

Если мое описание все еще нечеткое: постоянно повторяющийся пример проблемы, которую я хочу решить, это: я хочу удалить большую папку с фотографиями или видео, которые я скопировал / переместил / переименовал, и я хочу иметь (надеюсь так пусто) список файлов в этой папке, где у меня нет копий.

В настоящее время я пишу инструмент, который отвечает моим требованиям, но я сомневаюсь, что я первый, кто должен решить такую ситуацию / проблему. В любом другом случае я ценю любые подсказки или отзывы, которые помогают развитию!

2 ответа2

1

Вы можете сделать это с помощью rmlint.

Используйте следующую командную строку, чтобы найти файлы, которые находятся только в папке 3:

rmlint -k -o uniques folder1 folder2 // folder3

Редактировать: также, чтобы узнать, какие файлы можно безопасно удалить из папки 3, поскольку у них есть копии где-то в папке 1 или папке 2:

rmlint -km folder3 // folder1 folder2

Это создаст сценарий оболочки (rmlint.sh), который вы можете использовать для удаления идентифицированных файлов. Для больших наборов данных вы можете добавить индикатор выполнения, добавив в команду -g .

1

Вы пробовали git-приложение для управления файлами? Он автоматически отслеживает, какие файлы находятся в каком хранилище, и обеспечивает наличие как минимум копий файлов в репозиториях.

Например, если вы запустите git annex drop Photos/2014 , файлы будут удалены локально, но только после проверки их наличия на другом диске (а git annex get … скопирует их обратно). Также есть обратное git annex move/copy --to .

Если вы реорганизуете файлы, annex add && annex sync обновит структуру каталогов во всех репозиториях. Также есть функция « предпочитаемого содержимого », позволяющая указать, в какие репозитории git-annex должна автоматически копировать файлы - например, большой диск с резервной копией будет требовать все файлы, рабочий стол будет требовать только то, что было извлечено вручную через annex get , ваш ноутбук будет хочу просто каталог "Фото /2016" и т. д.

Таким образом, на ваш первоначальный вопрос, «какие файлы есть здесь, но нет там», можно ответить через:

git annex find --in . --not --in backup_vol
git annex find --in . --not --copies 2

Если в хранилище есть numcopies ≥ 2, вы можете использовать:

git annex find --approxlackingcopies 1

Обратите внимание, что вы, вероятно, захотите включить "прямой режим" с помощью git annex direct - это позволяет git-annex отслеживать только последние версии содержимого файлов, но также упрощает работу с самими файлами. (Тонкий режим v6 улучшает это.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .