Bagaimana cara menemukan dan menghapus trek musik rangkap?

8

Masalah saya adalah karena beberapa alasan saya memiliki duplikat dari beberapa trek musik. Namun mereka tidak disebutkan namanya. Contohnya:

Music / Prefuse 73 / One Word Extinguisher / 07. Detchibe.mp3

&

Music / Prefuse 73 / One Word Extinguisher / 07 - Detchibe.mp3

Perhatikan mereka adalah lagu duplikat tetapi 07 * . * & the 07 - menipu para pencari file duplikat yang mencari berdasarkan nama file.

John McKean Pruitt
sumber
2
Sudahkah Anda mencoba salah satu saran di sini ?
jpd
Bisakah fdupes memilih satu dari dua duplikat dan menghapusnya? Kalau tidak, perintah fdupes -r hanya menghasilkan daftar yang tidak membawa saya ke mana pun.
John McKean Pruitt
Apakah ini menjawab pertanyaan Anda? Bagaimana saya bisa menemukan lagu duplikat?
karel

Jawaban:

2

Anda dapat menggunakan fdupesseperti jawaban untuk pertanyaan »Cara menemukan dan menghapus file duplikat« disarankan. Biarkan saya memberi contoh:

mkdir -p "Music/Prefuse 73/One Word Extinguisher/"
dd if=/dev/urandom of=Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 bs=1023 count=2048
  2048+0 records in
  2048+0 records out
  2095104 bytes (2.1 MB) copied, 0.379806 s, 5.5 MB/s
cp Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 Music/Prefuse\ 73/One\ Word\ Extinguisher/"07 - Detchibe.mp3"
fdupes -rd .
  [1] ./Music/Prefuse 73/One Word Extinguisher/07.Detchibe.mp3
  [2] ./Music/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3

  Set 1 of 1, preserve files [1 - 2, all]:

Pertama saya membuat direktori seperti pada contoh Anda. Saya membuat file dari data acak dan menyalin isinya ke file lain. Ketika saya menjalankan fdupes -rdperangkat lunak menemukan dua file yang tepat dan meminta yang mana untuk dihapus.

Jika Anda memiliki banyak file, Anda dapat menggunakan opsi ini -1. fdupesakan mencetak semua duplikat pada satu baris. Anda dapat memprosesnya dengan xargsdan fitur shell lainnya.

qbi
sumber
Bisakah out put dari perintah fdupes -r disalurkan ke perintah mv?
John McKean Pruitt
fdupes -rd dekat dengan yang saya inginkan tetapi saya harus menekan satu sekitar 2000 kali agar semua dupes hilang.
John McKean Pruitt
1
Saya menambahkan paragraf ke jawaban saya di atas.
qbi
Masalahnya di sini adalah fdupessepertinya tidak masuk ke dalam sub folder. Misalnya ~/Desktop/Dupes2/memiliki folder di dalamnya berjudul Blood Sugar Sex Magik dengan Dupes, namun fdupes -rperintah sederhana tidak mengembalikan daftar apa pun.
John McKean Pruitt
2

Saya menemukan rantai perintah yang agak sederhana. Terima kasih banyak kepada @Oli.

fdupes -rf --quiet ~/Desktop/Dupes2/ | while read i; do mv "$i" ~/Desktop/Dupes/ ; done

Ini digunakan fdupesuntuk secara rekursif ( -r) menemukan dupes, menghilangkan yang pertama ( -f). Bash membaca baris ini demi baris melalui readtangan amd setiap baris mvuntuk memindahkan semua duplikat ke direktori lain. Perhatikan penggunaan tanda kutip dalam whileloop untuk menangani spasi dan tanda baca cerdik lainnya yang fdupestidak akan menangani (bahkan dengan -1/ --sameline).

John McKean Pruitt
sumber
@ Oli, ini tidak melakukan trik. Tidak ada file yang dipindahkan dari satu folder ke folder lainnya
John McKean Pruitt
@Oli lihat komentar terakhir saya ke "qbi" di bawah ini.
John McKean Pruitt
1

Dalam jawaban untuk Secara manual mengatur jumlah mendengarkan lagu di Banshee? , ini menjelaskan cara mendapatkan di database yang digunakan banshee untuk menyimpan semua informasi trek.

Setelah Anda terhubung ke database, pada tabel permintaan eksekusi, tempel

select tweaked_track, count(*) from 
  (select replace(replace(replace(title, ' ', ''), '-', ''), '.', '') as tweaked_track 
   from coretracks) 
group by tweaked_track 
order by 2, 1 desc;

ke dalam kotak string SQL, lalu klik 'jalankan permintaan'. Ini akan menunjukkan semua trek yang Anda miliki dengan judul yang sama dengan mengabaikan spasi, tanda hubung, dan titik. Jika ada karakter lain yang ingin Anda abaikan, tambahkan mereka ke kueri dengan pola yang sama. (IE tambahkan replace(sebelum "ganti" pertama dan setelah ")" pada baris itu, tambahkan , '[character you want removed]', '').

(Saya tidak tahu seberapa banyak yang Anda ketahui tentang sql - jika Anda memerlukan detail lebih lanjut, kirimkan komentar.)

Ini akan memberi Anda daftar judul. Anda harus benar-benar menghapusnya sendiri.

Mungkin ada cara yang lebih baik untuk melakukan ini, tetapi jika ada, saya tidak tahu tentang itu.

Setelah Anda memiliki daftar besar file yang akan dihapus (baik dari metode saya atau dari yang fdupeslain telah disebutkan), masukkan daftar file yang ingin Anda hapus ke dalam direktori teks. Pastikan salah satu dari yang berikut ini benar:

Opsi # 1: Nama file berisi path lengkap. Misalnya file tersebut mungkin berisi:

/home/doneill/music/weird_al/duped_file.mp3
/home/doneill/music/weird_al/another_dupe.mp3
/home/doneill/music/bach/baroque_dupe.mp3

Opsi # 2: Nama file berisi path relatif, dan file dengan daftar nama file disimpan di folder induk. Misalnya, jika daftar file Anda disimpan /home/doneill/music/, itu akan berisi:

weird_al/duped_file.mp3
weird_al/another_dupe.mp3
bach/baroque_dupe.mp3

Dalam kedua kasus, buka jendela terminal, dan ubah ke folder yang berisi file dengan daftar cd /home/doneill/music/misalnya.

Ketikkan:

for a in `cat filelist.txt`; do echo $a; done

(Mengganti filelist.txt dengan nama file dengan daftar) Ini harus memuntahkan daftar semua file yang ingin Anda hapus. Luangkan waktu sejenak untuk memeriksa daftar. Jika benar, ketikkan:

for a in `cat filelist.txt`; do rm $a; done

Ini pada dasarnya memberitahu komputer Anda: untuk setiap baris dalam file filelist.txt, hapus file dengan nama yang tercantum.

David Oneill
sumber
Pertanyaannya menanyakan tentang file duplikat, tidak menyebutkan Banshee.
jpd
2
@jpd Ini ditandai banshee ...
David Oneill
Maaf, semua tag tidak terjawab.
jpd
Saya tidak bisa mendapatkan ke pangkalan data banshee karena 11.10 tidak memiliki opsi untuk membuka dengan perintah khusus dan solusi yang disarankan tidak berfungsi - saya dilempar ke lubang kelinci di sana sebentar tetapi saya kembali tanpa solusi.
John McKean Pruitt
1
@JohnMcKeanPruitt 1) ​​Jalankan browser database sqlite (perintahnya adalah sqlitebrowserjika itu tidak dimasukkan ke dalam menu Anda ketika Anda menginstalnya). 2) File -> Buka. 3) Ketikkan /home/[user]/.config/banshee-1/pada bilah alamat 'Lihat' (ganti [pengguna] dengan nama pengguna Anda). 4) Klik dua kali banshee.db.
David Oneill