Flyounet : (Digital|Real)? life

Une sorte de journal quotidien, mais en vachement plus espacé dans le temps

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.