Atualmente, estou lutando com algumas pastas de música. Uma vez eu decidi nomeá-los seguindo o padrão: artist - album - year
. Percebi hoje que essa não era uma jogada inteligente e agora quero nomear meus diretórios seguindo o padrão: year - artist - album
como eles aparecerão em ordem crescente quando listados.
Comecei a renomear manualmente, mas, com aproximadamente 700 pastas, deve haver uma maneira mais simples; Eu tentei usar, gprename
mas não sou tão bom em regex e bash scripting ...
Existe alguém que possa me ajudar a poupar minhas pobres pontas dos dedos?
Alguns exemplos:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
se tornaria
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
EDIT: Alguns nomes de artistas e álbuns têm caracteres especiais como And.Id
ou Kool & The Gang
. Embora todo diretório tenha -
como separador.
command-line
bash
directory
regex
batch-rename
TazMayhem
fonte
fonte
-
neles?Respostas:
Supondo que você tenha acesso ao perl
rename
(geralmente disponível no Ubuntu - obrigado a @Serg por esclarecer a diferença. Em caso de dúvida, ligue/usr/bin/rename
e você deve obter o caminho certo), você pode usar:Remova
-n
após o teste para renomear os diretórios. Isso assume a data de todos os álbuns entre 1000 e 9999. Provavelmente razoável ...Explicação
s/old/new
substituaold
pornew
(.*)
salve qualquer número de caracteres para fazer referência mais$1
tarde(\d{4})\/
salve quatro dígitos no final da linha para fazer referência mais$2
tarde.*/
corresponder a todos os diretórios (não arquivos - graças à @muru pela ajuda!)fonte
*/
apenas para corresponder aos diretórios.mksh
têm um built-in chamadorename
. É suficiente substituí-lo por caminho completo ou ligarprename
para chamar o nome do Perl #rename
não é "às vezes chamadoprename
", mas aparentemente são dois "ramos" do mesmo script, um que não é mantido pelo Debian, e o outro que é. Então sim . . . é um monte de confusão - algumas conchas têm o seu própriorename
pacote, perl tem a sua própriarename
, e Debian em si oferece pacote separadorename.ul
em unix.stackexchange.com/q/229230/21167Um script Python simples pode fazer esse trabalho:
Conteúdo do script:
Como isso funciona:
*/
a fornecer apenas diretórios como argumentos para o script-
caracteres. O novo nome do arquivo é construído com as partes extraídas.move()
função doshutils
módulo é o que realmente renomeia os diretóriosObserve o uso:
./rename_dirs.py */
fonte