Eu basicamente quero ir disso:
.
├── Alan Walker
│ ├── Different World
│ │ ├── 01 Intro.mp3
│ │ ├── 02 Lost Control.mp3
│ │ └── cover.jpg
│ └── Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora
│ └── Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses
└── Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
para isso:
.
├── Alan Walker - Different World
│ ├── 01 Intro.mp3
│ ├── 02 Lost Control.mp3
│ └── cover.jpg
├── Alan Walker - Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora - Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses - Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
Nenhuma das soluções existentes que encontrei incluiu renomear o próprio diretório. Seria ótimo poder fazer isso com o zmv, mas não consigo descobrir como.
easytag
pode deixá-lo fazer isso, mas apenas para arquivos de áudio - Eu não acho que ele vai passar tampas, etc.Respostas:
Zsh
Não testado:
A segunda linha remove todos os diretórios vazios, mesmo aqueles que não tinham um arquivo antes. É possível contornar isso com um
mv
wrapper personalizado que registra de quais diretórios ele move as coisas.Observe que isso percorre links simbólicos para diretórios no diretório atual.
Utilitário de renomeação do Linux
Não testado.
Observe que isso percorre links simbólicos para diretórios no diretório atual e em seus subdiretórios. A segunda linha remove todos os diretórios vazios, mesmo aqueles que não tinham um arquivo antes.
Script de renomeação do Perl
Não testado.
Observe que isso percorre links simbólicos para diretórios no diretório atual e em seus subdiretórios. A segunda linha remove todos os diretórios vazios, mesmo aqueles que não tinham um arquivo antes.
Aqui está uma abordagem mais complexa que remove apenas os diretórios dos quais renomeou algo. Novamente, não testado.
fonte
Algo assim talvez?
Isso passa por todos os diretórios de nível superior no diretório atual (os nomes das bandas). Para cada diretório, ele passa por seus subdiretórios (os nomes dos álbuns). Para cada par de nome de banda e nome de álbum, um novo diretório é criado e os arquivos do subdiretório são movidos para ele. Os subdiretórios do álbum são removidos quando processados, assim como os diretórios originais de nível superior da banda.
As
rmdir
chamadas falharão se algum diretório contiver nomes de arquivos ocultos ou se algum dos novos diretórios falhar ao ser criado.Este é um código totalmente não testado. Execute-o em uma cópia de backup dos seus arquivos.
fonte
Estrategicamente, em vez de mover arquivos, você considerou deixar a estrutura atual no lugar e criar links para a nova estrutura desejada?
Taticamente, um padrão que fará o trabalho é assim:
find
localiza todos os diretórios exatamente com dois níveis de profundidade do diretório de trabalho atual, que deve ser o diretório que contém as bandas: assim, dois níveis de profundidade são os nomes dos álbuns abaixo dos nomes das bandas. 1xargs
consome cada caminho que contém um álbum e chama o script bash embutido.bash -c '...'
toma o caminho do álbum como seu primeiro argumento, dividindo-o em duas partes: a banda ($b
) e o álbum ($a
). Por fim, o script reúne os nomes no formato desejado e vincula o novo nome do diretório ao diretório original.Observe que, neste exemplo, os links seriam criados no mesmo diretório a partir do qual você inicia, que também é onde estão os nomes das bandas.
Você pode - e deve - ajustar a
ln
estratégia acima para corresponder à sua intenção.mv
com os caminhos certos se você deseja reorganizar fisicamente ouln
se deseja criar uma "visualização" conveniente sobre a mídia. As partes importantes dentro do script bash são:$b
o nome da banda. Sempre citá-lo:"$b"
.$a
o nome do álbum. Sempre citá-lo:"$a"
.$1
o caminho físico para o diretório do álbum. Sempre citá-lo:"$1"
.1 Acredito que
m{ax,in}depth
sejam suportados pelo GNU e por algum BSDfind
, mas não pelo POSIX: nesse caso, conte com*/*
uma ginástica shell semelhante ou semelhante.fonte