GNU/Linux >> Tutoriels Linux >  >> Linux

BASH :trouve les fichiers en double (compatible MAC/LINUX)

cela fonctionne pour moi sur mon mac, vous attraperez le fichier en double par leur valeur md5 :

find ./ -type f -exec md5 {} \; | awk -F '=' '{print $2 "\t" $1}' | sort

Je ne connais pas la compatibilité Mac, mais cela fonctionne pour moi(TM) :

#!/bin/bash
[ -n "$1" ] || exit 1
exec 9< <( find "$1" -type f -print0 )
while IFS= read -r -d '' -u 9
do
    file_path="$(readlink -fn -- "$REPLY"; echo x)"
    file_path="${file_path%x}"
    exec 8< <( find "$1" -type f -not -path "$file_path" -print0 )
    while IFS= read -r -d '' -u 8 OTHER
    do
        cmp --quiet -- "$REPLY" "$OTHER"
        case $? in
            0)
                echo -n "cmp -- "
                printf %q "${REPLY}"
                echo -n ' '
                printf %q "${OTHER}"
                echo ""
                break
                ;;
            2)
                echo "\`cmp\` failed!"
                exit 2
                ;;
            *)
                :
                ;;
        esac
    done
done

Le résultat est un ensemble de commandes que vous pouvez exécuter pour vérifier que le résultat est correct :)

Edit :La dernière version fonctionne avec des noms de fichiers vraiment bizarres comme :

$'/tmp/--$`\\! *@ \a\b\E\E\f\r\t\v\\"\' \n'

Cela trouvera des fichiers sous un répertoire avec des dupes. C'est assez brut, mais ça marche.

#!/bin/bash

CKSUMPROG=md5sum
TMPFILE=${TMPDIR:-/tmp}/duplicate.$$
trap "rm -f $TMPFILE" EXIT INT

if [ ! -d "$1" ]
then
    echo "usage $0 directory" >2
    exit 1
fi

PRINTBLANK=
# dump fingerprints from all target files into a tmpfile
find "$1" -type f 2> /dev/null | xargs $CKSUMPROG  > $TMPFILE 2> /dev/null

# get fingerprints from tmpfile, get the ones with duplicates which means multiple files with same contents
for DUPEMD5 in $(cut -d ' ' -f 1 $TMPFILE | sort  | uniq -c | sort -rn | grep -v '^  *1 ' | sed 's/^ *[1-9][0-9]* //')
do
    if [ -z "$PRINTBLANK" ]
    then
        PRINTBLANK=1
    else
        echo
        echo
    fi

    grep "^${DUPEMD5} " $TMPFILE | gawk '{print $2}'
done

Linux
  1. Comment trouver les fichiers modifiés récents ou d'aujourd'hui sous Linux

  2. 5 outils de ligne de commande pour trouver rapidement des fichiers sous Linux

  3. 25 exemples pratiques de commande de recherche utiles sous Linux

  4. Comment trouver des fichiers en double sous Linux

  5. Trouver des fichiers en double ?

Comment compter les fichiers dans le répertoire sous Linux

Comment rechercher et supprimer des fichiers en double sous Linux

Les 3 meilleurs outils pour rechercher et supprimer des fichiers en double sous Linux

Comment trouver des fichiers en double sous Linux et les supprimer

Trouvez facilement des fichiers et des répertoires sur Linux

Rechercher du texte dans des fichiers sous Linux à l'aide de grep