Você pode usar o 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
}
Este script é um pouco complicado, então vamos passar por isso com cuidado. Primeiro, ele obtém a pasta especificada como um argumento, recursivamente localiza os arquivos que contém, agrupa-os por nome de arquivo, pega apenas os grupos com mais de um item (ou seja, os grupos que representam músicas duplicadas) e armazena essa coleção de grupos em %código%. Em seguida, ele recebe novamente o diretório pai especificado, mas lista apenas as subpastas imediatas. Ele os filtra ( $dupes
), permitindo que apenas aqueles contendo apenas entradas duplicadas saiam do pipeline e sejam impressos na tela.
Esse grande bloco de filtro ocupa a maior parte do script, portanto, vamos analisá-lo em mais detalhes. Ele começa com duas variáveis, uma para acompanhar se a pasta do álbum atual contém apenas duplicatas até o momento e outra para observar se realmente existem músicas na pasta. (Eu suspeito que não seria realmente útil contar pastas vazias como álbuns de compilação.) Ele lista os arquivos na pasta do álbum e, em seguida, para cada um deles ( ?
), garante que existe um grupo duplicado contendo um arquivo com o mesmo nome, e se não (ou seja, nada sai do pipeline curto dentro do %
), indica a falha definindo If
como false. Se o bloco for-each não for executado, então $allDupes
permanecerá falso. Finalmente, o grande bloco de filtro avalia se todos os itens do álbum são duplicados e se há algum item ali. O resultado da expressão determina se a pasta do álbum será incluída na saída do pipeline externo.
Observe que alguns dos recursos do PowerShell usados neste script foram introduzidos moderadamente recentemente. Se você usar o Windows 7, as opções $hasAny
e -File
não funcionarão. Isso pode ser contornado, se necessário.
Para usar o script, salve-o como um arquivo -Directory
, por exemplo %código%. Se ainda não o fez, siga as instruções na seção Habilitando Scripts do wiki de tags do PowerShell . Em seguida, você pode executá-lo a partir de um prompt do PowerShell no diretório em que você salvou, fornecendo o caminho para a pasta do artista:
.\albumdupes.ps1 'C:\Users\Ben\Test\albumtest'
Você terá uma saída assim:
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