Установка исправления Mandrill

Я хочу поделиться этим, потому что я думаю, что это довольно забавно.

Для каждой подпапки под целевой папкой мы генерируем хэш для этой подпапки.

Каждая папка hash создается из результата хэширования всех файлов ниже этой папки. Таким образом, любая папка, содержащая идентичные файлы в той же структуре, должна содержать один и тот же хэш!

В конце мы используем uniq для отображения только повторяющихся хэшей папок.

Сохраните следующее скрипт как seek_duplicate_folders.sh, а затем запустите его следующим образом:

$ bash seek_duplicate_folders.sh [root_folder_to_scan]

Вот сценарий:

#!/bin/bash
target="$1"

hash_folder() {
  echo "Hashing $1" >/dev/stderr
  pushd "$1" >/dev/null

  # Hash all the files
  find . -type f | sort | xargs md5sum |

  # Hash that list of hashes, discard the newline character,
  # and append the folder name
  md5sum - | tr -d '\n'
  printf "  %s\n" "$1"

  popd >/dev/null
}

find "$target" -type d |
while read dir
do hash_folder "$dir"
done |
sort |
# Display only the lines with duplicate hashes (first 32 chars are duplicates)
uniq -D -w 32

Предостережения:

Неэффективно: it md5sums файлы в глубину дерева несколько раз (один раз на папку предка) Не обнаруживает различий в временных отметках файла, правах собственности или разрешениях Игнорирует пустые папки. Таким образом, две папки, которые содержат идентичные файлы или файлы, но имеющие разные пустые папки внутри, будут по-прежнему отображаться как идентичные. Игнорирует символические ссылки. Файлы, содержащие разные символические ссылки, все равно могут быть указаны как идентичные.
1
задан 30 March 2017 в 19:41

0 ответов

Другие вопросы по тегам:

Похожие вопросы: