Знайдіть усі папки в каталозі з однаковим вмістом


10

Чи можна в Ubuntu знайти повторювані папки в каталозі (тобто папки з однаковим вмістом)? Я думаю, що вже є деякі інструменти командного рядка для пошуку дублікатів файлів (наприклад, fdupes), але я хочу знайти дублікати папок. Тобто знайдіть папки, які відповідають змісту файлів, які вони містять (хоча імена файлів та інші метадані можуть відрізнятися).


Я можу почати з генерування списку всіх папок у каталозі (відсортованих за довжиною), а потім перевірити кожну пару папок однакової довжини.
Андерсон Грін

Визначте "дублікат". Чи повинні файли всередині відповідати лише вмісту файлу? Ім'я файлу? Номер вводу? Розмір файлу?
Кріс Даун

@ChrisDown Питання оновлено.
Андерсон Грін

3
Так. Каталоги насправді є лише файлами, тому ваше твердження неоднозначне. Мати "однаковий вміст" насправді означає, що обидва каталоги містять однакові посилання на inode. Незрозуміло, чи ти це маєш на увазі, чи ти маєш на увазі, що файли всередині повинні мати однаковий вміст, і якщо так, чи є інші умови (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

Елегантний скрипт, лише незначна помилка полягає в тому, що він повертає однакове, коли не існує жодного або обох каталогів. Має бути легко зафіксованим, якщо хтось кращий у сценаріях, ніж я
косинус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.