Temukan sub-folder yang hanya berisi file duplikat

1

Saya mencari metode (tidak termasuk perangkat lunak berbayar) untuk menemukan semua folder yang hanya berisi file dengan yang juga di setidaknya satu sub-folder lain dari direktori induk. Jika digunakan di perpustakaan musik, ini akan mencantumkan semua album kompilasi.

Struktur file:
Folder artis
- Folder album
- - lagu dengan nama file sebagai judul

DDriggs00
sumber
Ada banyak duplikat? Berapa banyak lapisan?
jdwolf
Diperbarui OP @jdwolf
DDriggs00

Jawaban:

1

Anda dapat menggunakan PowerShell!

$dupes = gi $args[0] | gci -File -Recurse | group Name | ? {$_.Count -gt 1}
gi $args[0] | gci -Directory | ? {
    $allDupes = $true
    $hasAny = $false
    $_ | gci -File | % {
        $folder = $_
        $hasAny = $true
        If (!($dupes | ? {$_.Name -eq $folder.Name})) {$allDupes = $false}
    }
    $allDupes -and $hasAny
}

Script ini sedikit rumit, jadi mari kita teliti dengan seksama. Pertama, ia mendapatkan folder yang ditentukan sebagai argumen, secara rekursif menemukan file yang dikandungnya, mengelompokkannya berdasarkan nama file, hanya mengambil grup dengan lebih dari satu item (yaitu grup yang mewakili lagu yang digandakan), dan menyimpan koleksi grup dalam $dupes. Kemudian lagi mendapat direktori induk yang ditentukan, tetapi kemudian hanya daftar subfolder langsung. Ini memfilternya ( ?), membiarkan hanya yang berisi entri yang digandakan keluar dari jalur pipa dan dicetak ke layar.

Blok filter besar itu menghabiskan sebagian besar skrip, jadi mari kita lihat lebih detail. Itu dimulai dengan dua variabel, satu untuk melacak apakah folder album saat ini hanya berisi duplikat sejauh ini, dan lainnya untuk mencatat apakah sebenarnya ada lagu di folder tersebut. (Saya menduga tidak benar-benar membantu untuk menghitung folder kosong sebagai album kompilasi.) Ini mencantumkan file dalam folder album, kemudian untuk masing-masing folder tersebut ( %), pastikan ada grup duplikat yang berisi file dengan nama yang sama , dan jika tidak (yaitu tidak ada yang keluar dari pipa pendek di dalam If), menunjukkan kegagalan dengan menetapkan $allDupeske false. Jika untuk-setiap blok tidak berjalan sama sekali, maka$hasAnytetap salah. Akhirnya, blok filter besar mengevaluasi apakah semua item dalam album adalah duplikat dan sebenarnya ada di sana. Hasil dari ekspresi menentukan apakah folder album akan dimasukkan dalam output pipa luar.

Perhatikan bahwa beberapa fitur PowerShell yang digunakan dalam skrip ini baru-baru ini diperkenalkan. Jika Anda menggunakan Windows 7, -Filedan -Directoryswitch tidak akan berfungsi. Ini bisa diselesaikan jika perlu.

Untuk menggunakan skrip, simpan sebagai .ps1file, mis albumdupes.ps1. Jika Anda belum melakukannya, ikuti instruksi di bagian Skrip yang Mengaktifkan wiki tag PowerShell . Kemudian Anda dapat menjalankannya dari prompt PowerShell di direktori tempat Anda menyimpannya, menyediakan jalur ke folder artis Anda:

.\albumdupes.ps1 'C:\Users\Ben\Test\albumtest'

Anda akan mendapatkan output seperti ini:

    Directory: C:\Users\Ben\Test\albumtest


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       11/20/2017   2:00 PM                Album C
d-----       11/20/2017   2:01 PM                Album F
Ben N
sumber