GNU/Linux >> Tutoriales Linux >  >> Linux

BASH:encuentra archivos duplicados (compatible con MAC/LINUX)

funciona para mí en mi mac, capturará el archivo duplicado por su valor md5:

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

No sé acerca de la compatibilidad con Mac, pero esto funciona para mí (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

El resultado es un conjunto de comandos que puede ejecutar para comprobar que el resultado es correcto :)

Editar:la última versión funciona con nombres de archivo realmente extraños como:

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

Esto encontrará archivos en un directorio con duplicados. Es bastante crudo, pero funciona.

#!/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. Cómo encontrar archivos modificados recientes o de hoy en Linux

  2. 5 herramientas de línea de comandos para encontrar archivos rápidamente en Linux

  3. 25 ejemplos prácticos útiles del comando find en Linux

  4. Cómo encontrar archivos duplicados en Linux

  5. Comandos de búsqueda de Linux

Cómo contar archivos en el directorio en Linux

Cómo encontrar y eliminar archivos duplicados en Linux

Las 3 mejores herramientas para buscar y eliminar archivos duplicados en Linux

Cómo encontrar archivos duplicados en Linux y eliminarlos

Encuentre archivos y directorios en Linux fácilmente

Encuentra texto en archivos en Linux usando grep