Найти все папки в каталоге с одинаковым содержимым

10

Есть ли в Ubuntu возможность найти дубликаты папок в каталоге (т. Е. Папки с одинаковым содержимым)? Я думаю, что уже есть некоторые инструменты командной строки для поиска дубликатов файлов (например, fdupes), но вместо этого я хочу найти дубликаты папок. То есть найдите папки, которые соответствуют содержанию файлов, которые они содержат (хотя имена файлов и другие метаданные могут отличаться).

Андерсон Грин
источник
Я мог бы начать с создания списка всех папок в каталоге (отсортированных по длине), а затем проверить каждую пару папок одинаковой длины.
Андерсон Грин
Определите «дубликат». Должны ли файлы внутри совпадать только с содержимым файла? Имя файла? Номер инода? Размер файла?
Крис Даун
@ChrisDown Вопрос был обновлен.
Андерсон Грин
3
Да. Каталоги - это просто файлы, поэтому ваше утверждение неоднозначно. Наличие «одинакового содержимого» в действительности означало бы, что каталоги содержат одинаковые ссылки на иноды. Неясно, имеете ли вы в виду это, или вы имеете в виду, что файлы внутри должны иметь одинаковое содержимое, и если да, то есть ли другие условия (mtime, имя файла и т. Д.).
Крис Даун
3
@ChrisDown Я имею в виду, что файлы внутри должны иметь одинаковое содержимое.
Андерсон Грин

Ответы:

5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

Вы можете увидеть это в действии здесь:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different
Крис Даун
источник
Так как этот скрипт не протестирован, я хочу посмотреть, работает ли он так, как он должен работать.
Андерсон Грин
1
@AndersonGreen Проверьте обновленный ответ, проверили его.
Крис Даун
Приятно! Там также должен быть тест с cat > 1/2 <<< barи cat > 2/3 <<< bar показать несколько файлов и разные метаданные (== "То же самое")
nealmcb
@ChrisDown: нужна ли сортировка на последнем шаге?
harish.venkat
Элегантный скрипт, единственная незначительная ошибка в том, что он возвращает Same, когда ни один, ни оба каталога не существуют. Должно быть легко исправимо, если кто-то лучше в сценарии, чем я
косинус