GNU/Linux >> Belajar Linux >  >> Linux

BASH:temukan file duplikat (kompatibel dengan MAC/LINUX)

ini berfungsi untuk saya di mac saya, Anda akan menangkap file duplikat dengan nilai md5 mereka:

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

Tidak tahu tentang kompatibilitas Mac, tetapi ini Bekerja Untuk Saya(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

Hasilnya adalah serangkaian perintah yang dapat Anda jalankan untuk memeriksa apakah hasilnya benar :)

Sunting:Versi terakhir berfungsi dengan nama file yang sangat aneh seperti:

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

Ini akan menemukan file di bawah dir dengan dupes. Ini cukup mentah, tetapi berhasil.

#!/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. Cara Menemukan File Modifikasi Terbaru atau Hari Ini di Linux

  2. 5 Alat Baris Perintah untuk Menemukan File dengan Cepat di Linux

  3. Temukan File Duplikat?

  1. 25 Berguna menemukan Contoh Praktis Perintah di Linux

  2. Bagaimana menemukan file duplikat di Linux

  3. Bagaimana menemukan file duplikat di Linux? Bantuan ada di sini dengan perintah fdupes!

  1. Cara menemukan file di Linux

  2. Cara Menemukan dan Menghapus File Duplikat/Tidak Diinginkan di Linux Menggunakan Alat 'FSlint'

  3. Linux menemukan perintah