Eu tenho uma pasta de 38 GB com 800 vídeos mp4 nela, depois de baixá-la novamente, o nome do arquivo não tem espaçamento, todas as palavras são unidas, mas ainda é maiúsculas e minúsculas.
Qual seria a maneira mais eficaz de renomear em massa?
Lembro-me de um 'rename' ou 'autorename' incluído há muito tempo na minha distro, mas parece que não o tenho agora.
A ferramenta mais conhecida e intuitiva para renomeação em massa é o
rename
. É muito parecidosed
com esteróides (mas especialmente para renomear). Este é o comando padrãorename
no Debian como SO (diferenterpm
das distros baseadas).Nomeado frequentemente
prename
ouperl-rename
. É capaz de fazer processamento regex poderoso:Se você deseja adicionar espaços entre cada 'palavras' do nome do arquivo mp4:
Remova
-n
akadry-run
quando suas tentativas forem satisfatórias.Por exemplo, você ainda pode injetar chamadas na
replacement
parte, comosprintf "%03d", 9
preenchimento de zero com oe
modificador.Você (Não) Não Aprende Perl em Cinco Minutos
Verifique o documento do perl sobre renomear
Existe outra ferramenta com o mesmo nome usada em algumas distros como um binário. O
deve ficar assim:
Ou
Se você não pode instalar pacotes de todo o sistema, há duas maneiras como
root
usuário regular (sem):cpan -i File::Rename
(melhor usar homebrew )** Isenção de responsabilidade: se você tiver um arquivo com caracteres Unicode UTF8 contíguos, como
AaaÃééZzz.mp4
a parte Unicode, será ignorado, consulte o comentário de @ Stéphane Chazelas abaixo . Uma solução é usarVerificar
Não sei qual seria a maneira mais eficiente (acho que você quis dizer eficiente), mas escreveria rapidamente um loop for como:
Explicação:
onde
sed
é o nome do "editor de fluxo"; ele recebe a entrada, executa um comando e produz a saída. Aqui, o comando és
, como em "pesquisar e substituir".Para separar palavras em maiúsculas, como para
FooBarBaz.mp4
se tornarFoo Bar Baz.mp4
, você pode inserir um espaço antes de cada letra maiúscula, exceto quando é o primeiro caractere no nome do arquivo, o que com zshzmv
você pode fazer (recursivamente) com:(remova o
-n
para funcionamento a seco, se estiver satisfeito).Cuidado, muda
Foo-Bar.mp4
paraFoo- Bar.mp4
.Só inseriria espaços entre uma letra e uma letra maiúscula, mas não funcionaria para
OnceUponATime
cima, pois o espaço seria inserido entren
eA
, mas não entreA
eT
, pois oA
já teria sido consumido pela substituição anterior.Como os zsh globs não têm o equivalente aos operadores de aparência do perl, contornar isso é mais difícil. Uma abordagem simples neste caso, porém, é apenas repetir a substituição por um tempo extra:
Outras respostas descreveram ferramentas que permitem a alteração com base em regexes e essa é uma boa abordagem. No entanto, essas respostas não abordam um ponto importante (IMHO): capacidade de visualização antes de realmente fazer alterações no disco (que pode ser difícil de reverter).
Entre no Emacs e seu
dired
modo, em particularwdired
, documentado no manual . Alguém abriria o diretório que contém os arquivos, alternaria wdired para tornar os nomes dos arquivos editáveis, faria alterações - provavelmente usando a pesquisa e substituição interativa de regex, revisaria as alterações e, finalmente, as comprometeria no disco.Estou ciente de que a instalação do Emacs para este caso de uso é uma abordagem pesada, mas gostaria de apontar que ele lida com nomes de arquivos com caracteres difíceis, por exemplo, espaços, trivialmente.