Temukan semua folder dalam direktori dengan konten yang sama


10

Di Ubuntu, adakah yang bisa menemukan folder duplikat di direktori (yaitu folder dengan konten yang sama)? Saya pikir sudah ada beberapa alat baris perintah yang tersedia untuk menemukan file duplikat (seperti fdupes), tetapi saya ingin mencari folder duplikat sebagai gantinya. Yaitu, cari folder yang sesuai dengan isi file yang dikandungnya (meskipun nama file dan metadata lainnya mungkin berbeda).


Saya mungkin mulai dengan membuat daftar semua folder dalam direktori (diurutkan berdasarkan panjangnya), dan kemudian memeriksa setiap pasang folder dengan panjang yang sama.
Anderson Green

Tentukan "duplikat". Haruskah file-file di dalamnya hanya cocok dengan konten file? Nama file? Nomor inode? Ukuran file?
Chris Down

@ChrisDown Pertanyaan telah diperbarui.
Anderson Green

3
Iya. Direktori benar-benar hanya file, jadi pernyataan Anda ambigu. Untuk memiliki "konten yang sama" dalam kenyataan akan berarti bahwa direktori keduanya mengandung referensi inode yang sama. Tidak jelas apakah maksud Anda itu, atau apakah maksud Anda file di dalamnya harus memiliki konten yang sama, dan jika demikian, apakah ada ketentuan lain (mtime, nama file, dll).
Chris Down

3
@ ChrisDown Maksud saya file di dalamnya harus memiliki konten yang sama.
Anderson Green

Jawaban:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

Anda dapat melihatnya beraksi di sini:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

Karena skrip ini tidak teruji, saya ingin melihat apakah ini berfungsi seperti seharusnya.
Anderson Green

1
@AndersonGreen Periksa jawaban yang diperbarui, ujilah.
Chris Down

Bagus! Seharusnya juga ada tes dengan cat > 1/2 <<< bardan cat > 2/3 <<< bar untuk menunjukkan beberapa file dan metadata yang berbeda (== "Sama")
nealmcb

@ChrisDown: apakah perlu mengurutkan dalam langkah terakhir?
harish.venkat

Skrip elegan, hanya bug minor yang mengembalikannya sama ketika salah satu atau kedua direktori tidak ada. Seharusnya mudah diperbaiki jika ada yang lebih baik dalam penulisan skrip daripada I.
cosine
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.