Eu tenho um diretório com arquivos .MP3 que gostaria de alterar as extensões para .mp3. Qual é a maneira mais fácil de fazer isso? Eu acho que algo como:
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \;
... embora eu saiba que isso não está certo. :) A substituição não está correta e não tenho certeza de como usar os comandos mv
a e a sed
com -exec
in find
.
Eu precisaria de um script bash para isso?
No zsh:
Para também cuidar de
.Mp3
ou.mP3
arquivos:fonte
Você pode usar o comando rename (cuidado, existem duas implementações principais com APIs diferentes) para elas. Por exemplo, para alterar o caso das extensões de nome de arquivo de cima para baixo, tente o seguinte:
com
rename
fromutil-linux
(às vezes chamadorename.ul
), supondo que.JPG
ocorra apenas uma vez nos nomes dos arquivoscom o
rename
fromperl
(às vezes chamadoprename
; várias variantes foram publicadas):Aqui está um tutorial de alguns caras sobre como ele mudou de um script bash confuso para esse comando simples para exatamente o seu caso de uso.
Outro comando sofisticado para fazer isso é
pax
. Se você estiver usando o ZSH para seu shell, também poderá usarzmv
.fonte
syntax error at (user-supplied code), near "."
quando executo este comando.Use perl-rename , canivete suíço de renomeação de arquivos com expressões regulares (no ubuntu, isso é fornecido com o pacote perl como nome de usuário):
Se você for cuidadoso, use as opções -n e -v para renomear o perl e ver o que ele realmente fará.
fonte
Você precisa de um script, porque "extensões" no Linux são na verdade apenas partes da sequência do nome do arquivo. Você precisa fazer alguma manipulação de string no script para obter o novo nome.
A citação dupla é importante se você tiver nomes de arquivos com espaços em branco. Eu pensei que algumas das aspas duplas eram um pouco óbvias.
fonte
Na festança:
fonte
primeiro faça backup de seus arquivos! você pode usar um liner python:
EDITAR:
Aqui está uma explicação detalhada de como o one-liner realmente funciona. Usando
python -c
estamos passando um comando para o interpretador python. Depois de importar as bibliotecasos
para arename
função eglob
para a listagem de arquivos, precisamos percorrer a lista de arquivos no diretório fornecido, que eu chameiPATH_TO_YOUR_DIRECTORY
, por exemplo, algo como./*
tudo no diretório atual.Infelizmente, na sintaxe de uma linha, os
for
loops não funcionam após aimport
notação, portanto, precisamos usar a notação entre colchetes. Ou seja, para cada nome de arquivo ou diretório queglob
está nos dando do caminho especificado, no formato de uma string, substituímos * .MP3 por * .mp3.Como o OP não mencionou a pesquisa recursiva, eu não a incluí em primeiro lugar.
fonte