Apenas tive que resolver o mesmo problema para minha biblioteca de músicas e resolvi o problema usando o seguinte script adaptado.
Eu não o desenvolvi completamente, ou seja, com variáveis, já que pretendo usá-lo apenas uma vez:).
O script move cada diretório contendo arquivos flac, incluindo todos os outros arquivos e subdiretórios, para um novo local usando o rsync. O rsync permite retomar o script se ele parar durante o processo.
Minha estrutura de biblioteca:
library
|-artist
|- album 1 (mp3)
|- album 2 (flac)
Nova estrutura de biblioteca:
library
|-artist
|- album 1 (mp3)
library-lossless
|-artist
|- album 2 (flac)
(1) inicie o seguinte shell script no destino SOURCE (substitua TARGET pelo respectivo diretório de sua escolha - usei apenas o caminho absoluto)
linha 1: encontre todos os diretórios que contenham arquivos flac e pipe (|) em ordem.
linha 2: remover duplicatas com classificação e canalizar essa lista no loop do
linha 3: para cada diretório do
linha 4: mostra o diretório em andamento
linha 5: rsync para o diretório de destino mais remover a estrutura de origem e preservação (-R) no local de destino
linha 6: remova o diretório vazio (como o rsync apenas remove arquivos)
find . -type f -name \*.flac -printf "%h\n" |
sort -u |
while read -r dirname; do
echo $dirname
rsync -azvm -R --remove-source-files "${dirname}" TARGET
find "${dirname}" -type d -delete
done
(2) após executar com sucesso o script em (1) você pode executar o seguinte comando no diretório fonte
find . -depth -type d -empty -delete
Este comando exclui todos os diretórios vazios não excluídos no script. Ou seja Diretórios "Artist", onde todas as subpastas / álbuns incluíam arquivos flac.