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


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, когда ни один, ни оба каталога не существуют. Должно быть легко исправимо, если кто-то лучше в сценарии, чем я
косинус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.