Menghapus File Duplikat di Linux

0
7164
menghapus file duplikat

Pada artikel sebelumnya saya sudah membahas tentang Cara Menemukan File dan Folder Besar di Linux. Pada tutorial kali ini saya akan mencoba memberikan tutorial tentang menghapus file duplikat di linux. Kadang, ketika hardisk komputer/server kita sudah mulai penuh, ada waktunya kita untuk membersihkan atau menghapus file-file yang tidak penting baik di komputer ataupun server. Tak jarang, banyak sekali file-file duplikat yang banyak sehingga memakan ruang hardisk komputer ataupun server kita.

Kebiasaan mengunduh file dari internet, merupakan salah satu faktor hardisk komputer kita menjadi penuh.

Lalu, bagaimana cara menghapus file duplikat di linux?

Jadi, pada tutorial kali ini saya akan menggunakan sebuah file bash script, dimana script tersebut ketika dijalankan akan secara otomatis menghapus file yang sama secara singkat!

jadi, anda tidak perlu lagi membuka satu-persatu folder untuk menghapus file yang duplikat tersebut.

Menghapus File Duplikat di Linux

Menghapus file dengan bash script.

Buat sebuah file dengan nama hapus-duplikat.sh

touch hapus-duplikat.sh

Buka file yang sudah terbuka tadi lalu masukkan kode dibawah ini.

#!/bin/bash
declare -A arr
shopt -s globstar

for file in **; do
  [[ -f "$file" ]] || continue

  read cksm _ < <(md5sum "$file")
  if ((arr[$cksm]++)); then 
    echo "rm $file"
  fi
done

Jangan lupa untuk simpan.

CTRL+X

lalu beri hak akses

chmod a+x hapus-duplikat.sh

Lalu jalankan

./hapus-duplikat.sh

Maka script tersebut akan mencari dan menghapus file yang duplikat didalam folder yang sama.

Jika cara tersebut cukup ribet, anda bisa menggunakan cara dibawah ini dengan one line command. artinya anda hanya perlu menjalankan perintah dibawah ini langsung diterminal.

Menemukan File Duplikat (berdasarkan ukuran terlebih dahulu, kemudian hash MD5)

find -not -empty -type f -printf “%s\n” | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 –all-repeated=separate

Hapus file duplikat yang ditemukan

find -not -empty -type f -printf “%s\n” | sort -rn | uniq -d |  xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 –all-repeated=separate | cut -f3-100 -d ‘ ‘ | tr ‘\n.’ ‘\t.’ | sed ‘s/\t\t/\n/g’ | cut -f2-100 | tr ‘\t’ ‘\n’ | perl -i -pe ‘s/([ (){}-])/\\$1/g’ | perl -i -pe ‘s/’\”/\\’\”/g’ | xargs -pr rm -v

Cara menguji file memiliki konten yang unik

if diff "$file1" "$file2" > /dev/null; then
    ...

Bagaimana cara mendapatkan daftar file dalam direktori?

files="$( find ${files_dir} -type f )"

Script

#!/bin/bash
# removeDuplicates.sh

files_dir=$1
if [[ -z "$files_dir" ]]; then
    echo "Error: files dir is undefined"
fi

files="$( find ${files_dir} -type f )"
for file1 in $files; do
    for file2 in $files; do
        # echo "checking $file1 and $file2"
        if [[ "$file1" != "$file2" && -e "$file1" && -e "$file2" ]]; then
            if diff "$file1" "$file2" > /dev/null; then
                echo "$file1 and $file2 are duplicates"
                rm -v "$file2"
            fi
        fi
    done
done

Misalnya, kami memiliki beberapa direktori:

$> ls .tmp -1
all(2).txt
all.txt
file
text
text(2)

Jadi hanya ada 3 file unik. Mari kita jalankan skrip itu:

$> ./removeDuplicates.sh .tmp/
.tmp/text(2) and .tmp/text are duplicates
removed `.tmp/text'
.tmp/all.txt and .tmp/all(2).txt are duplicates
removed `.tmp/all(2).txt'

Lalu cek kembali, maka akan ada 3 file tersisa

$> ls .tmp/ -1
all.txt
file
text(2)

 

Leave A Reply

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.