Trouver des fichiers dupliqués dans deux répertoires
Rédigé le .Le script
#!/bin/env bash
# compare-dirs.sh lists files from 2 directories and compares quickly name/size/date
# ©Flyounet 2014-2016
# Licenses : DSSL & WTFPL (LPRAB)
# Methode : LaRache©®™
[[ ${#} -lt 1 ]] && { echo "$0 'source dir' 'destination dir' (if current dir to check just put 'destination dir')"; exit; }
[[ ! -d "${1}" ]] && { echo "'$1' is not a valid directory. Aborting."; exit; }
[[ ! -z "${2:-}" && ! -d "${2}" ]] && { echo "'$2' is not a valid directory. Aborting."; exit; }
dird="$1"
[[ ${#} -ge 2 ]] && { cd "$1"; dird="$2"; }
for i in *; do
echo -n "$i"
[[ -f "$dird/$i" ]] && {
echo -n " : duplicate";
[[ "$(stat -c "%s" "$i")" != "$(stat -c "%s" "$dird/$i")" ]] && echo -n " - Size issue[$(stat -c "%s" "$i") --- $(stat -c "%s" "$dird/$i")]";
[[ "$(stat -c "%y" "$i")" != "$(stat -c "%y" "$dird/$i")" ]] && echo -n " - Date issue[$(stat -c "%y" "$i") --- $(stat -c "%y" "$dird/$i")]";
}
echo ""
done
exit 0
Ce script n'est là que pour aider. Il ne remplacera pas un un bon vieux checksum
des familles, genre md5sum
, sha512sum
, etc.
Ce script m'aide surtout à trouver les fichiers portant le même nom.
L'exemple
On doit toujours le montrer ... L'exemple ...
root@DiskStation:/volume1/_shares_/_scripts_# ./compare_dirs.sh /volume1/_shares_/_scripts_/ /volume1/_scripts_/
#recycle
@eaDir
changeRights.sh : duplicate - Date issue[2016-06-12 18:54:55.210440715 +0200 --- 2016-11-24 21:56:52.989136297 +0100]
extractor.sh : duplicate - Size issue[4403 --- 4419] - Date issue[2016-07-31 15:38:41.577618493 +0200 --- 2016-09-20 21:01:26.434580046 +0200]
extractor.sh.old
fullListeSorted.txt
makeListe.sh : duplicate - Date issue[2016-06-21 22:30:08.534049861 +0200 --- 2016-11-24 21:57:02.255035581 +0100]
mySync.sh
Ainsi que le montre l'exemple, j'ai 3 fichiers dupliqués (donc 6, mais vous auriez rectifié de vous même. Ou pas).
Dans chaque répertoire, il y a un fichier changeRights.sh
, un extractor.sh
et un makeListe.sh
.
Hormis pour extractor.sh
, les deux autres semblent identiques deux à deux.
En effet, extractor.sh
fait 4403 octets dans un répertoire et 4419 dans un autre.
Licences
As usual, c'est la DSSL et la WTFPL qui s'appliquent.