Saya mengunduh banyak gambar dalam direktori.
Downloader mengganti nama file yang sudah ada.
Saya juga mengganti nama beberapa file secara manual.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
Bagaimana cara menghapus yang digandakan? Hasilnya harus:
a.jpg
b.jpg
c.jpg
world.jpg
catatan: nama tidak masalah. Saya hanya ingin file uniq.
echo cksm
tepat setelah baris dimulai denganread
jika Anda ingin melihat hash setiap file.**
, itu memerintahkan daftar sedemikian rupa sehingga dua folder disisipkan daripada semua folder 1 lalu semua folder 2. Skrip akan selalu meninggalkan 'asli' pertama itu hits saat iterates melalui daftar. Anda dapatecho $file
sebelumread
baris untuk melihat apakah ini benar.fdupes adalah alat pilihan Anda. Untuk menemukan semua file duplikat (berdasarkan konten, bukan berdasarkan nama) di direktori saat ini:
Untuk secara manual mengkonfirmasi penghapusan file duplikat:
Untuk secara otomatis menghapus semua salinan tetapi yang pertama dari setiap file duplikat ( diperingatkan, peringatan ini, ini sebenarnya menghapus file, seperti yang diminta ):
Saya akan merekomendasikan untuk memeriksa file secara manual sebelum dihapus:
sumber
-d '\n'
fdupes -rdN .
mana -r adalah rekursif, -d adalah menghapus dan -N tidak ada promptAnda dapat mencoba FSLint . Ini memiliki baris perintah dan antarmuka GUI .
sumber
Menjadi sedikit malas, tidak butuh waktu lama bagi saya untuk menemukannya secara online .
Pertama-tama Anda harus membuat checksum CRC dari setiap file, karena Anda jelas hanya ingin menghapus duplikat yang tepat.
Kemudian, ulangi daftar file ini, baca di checksum dan juga nama file. Jika dua checksum sama, file akan dihapus. Ini berfungsi, karena pengurutannya numerik, dan hanya mengurutkan pada checksum, yang mengelompokkan file duplikat.
Jelas, ini tidak bekerja secara rekursif.
sumber
Bagaimana cara menguji file yang memiliki konten unik?
Bagaimana kita bisa mendapatkan daftar file dalam direktori?
Kami dapat memperoleh 2 file dari daftar itu dan memeriksa apakah namanya berbeda dan isinya sama.
Sebagai contoh, kami memiliki beberapa dir:
Jadi hanya ada 3 file unik.
Mari kita jalankan skrip itu:
Dan kami hanya mendapatkan 3 file.
sumber
Saya menulis skrip kecil ini untuk menghapus file yang digandakan
https://gist.github.com/crodas/d16a16c2474602ad725b
Pada dasarnya ia menggunakan file sementara (
/tmp/list.txt
) untuk membuat peta file dan hash-nya. Kemudian saya menggunakan file itu dan keajaiban pipa Unix untuk melakukan sisanya.Script tidak akan menghapus apa pun tetapi akan mencetak perintah untuk menghapus file.
mfilter.sh ./dir | bash
Semoga ini bisa membantu
sumber
Versi lebih ringkas untuk menghapus file yang digandakan (hanya satu baris)
find_same_size.sh
sumber
Saya menemukan cara yang lebih mudah untuk melakukan tugas yang sama
sumber
Sebagian besar dan mungkin semua jawaban yang tersisa sangat tidak efisien dengan menghitung checksum dari setiap file dalam direktori untuk diproses.
Pendekatan urutan besarnya yang berpotensi lebih cepat adalah pertama-tama mendapatkan ukuran setiap file, yang hampir segera (
ls
ataustat
), dan kemudian menghitung dan membandingkan checksum hanya untuk file yang memiliki ukuran tidak unik.sumber
Ini bukan yang Anda tanyakan, tetapi saya pikir seseorang mungkin merasa berguna ketika checksum tidak sama, tetapi namanya serupa (dengan akhiran dalam tanda kurung). Script ini menghapus file dengan akhiran sebagai ("digit")
sumber
Saya menemukan sebuah program kecil yang benar-benar menyederhanakan tugas semacam ini: fdupes .
sumber