Renomeando muitos arquivos no Mac OS X, processamento em lote

57

Eu costumava renomear arquivos no Linux através de um comando renomear:

rename 's/old_pattern/new_pattern/g' *glob

Existe algo semelhante no Mac OS X (Snow Leopard)?

matemática
fonte
O artigo a seguir explica como instalar renameno Mac OS X: macosxhints.com/article.php?story=20050630022203488
Paul R
Os backticks não estão aparecendo no seu comentário - você provavelmente deve adicioná-lo como resposta ou editar sua pergunta para incluir sua solução.
Paul R
11
A melhor solução rápida que eu já encontrei foi usar o Automator embutido. Confira este artigo para obter ajuda passo a passo fácil: tuaw.com/2008/11/11/…
nilay
Eu votaria-se a resposta de Nilay se não fosse um comentário ...
voidstate

Respostas:

49

Com o Homebrew , um gerenciador de pacotes para o OS X:

brew install rename 

Então você pode executar os mesmos renamecomandos que no Linux.

Juan Pablo
fonte
3
Você pode usar MacPorts pacote também: port instalar-file p5-rename
Miquel Adrover
2
@MiquelAdrover: Mas com a porta você precisa usar rename-5.22(onde 22 é a versão instalada) em vez derename
mems
Você pode renomear o link simbólicosudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ako
26

Use o poder do ZSH com sabedoria (digite zsho terminal se você é uma daquelas almas pobres que não o usa por padrão):

autoload zmv
zmv '(*).htm' '$1.html'

O ZMV segue a sintaxe do MMV .

ghoppe
fonte
mas isso também permite a substituição de regex? Isso parece ser apenas algum tipo de globbing de shell aprimorado.
math
4
@brubelsabs: Sim, o zmv pode fazer a substituição do regexp . Para arquivos correspondentes *user*.html, altere a extensão para .htmle altere todas as ocorrências de rcpara final: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: acho que o exemplo do zmv na sua resposta precisa -wou entre parênteses em torno do caractere curinga.
precisa
Eu realmente gosto dessa sugestão porque você não precisa instalar nada extra em um Mac (como o brew), mas permite que você use a sintaxe fácil do mmv.
Hay
+1 Nice. Algumas diferenças em relação às regexs às quais estou acostumado: 1) use em *vez de .*obter todas. *?parece funcionar como não ganancioso .*?. 2) para mim, ^e $para início e fim de seqüência parecia causar-lhe para combinar nada
user56reinstatemonica8
21

Desajeitado me:

for i in *.yourfiles; do mv "$i" "`echo $i | sed 's/old/new/g'`"; done 

E se você quiser usá-lo como eu costumo fazer desta maneira:

rename 's/old/new/' *.files

Eu recomendo usar este script litte em ~ / bin / rename:

#!/usr/bin/env zsh
SUBSEXPR=$1
shift
for i in $@; do mv $i `echo "$i" | sed $SUBSEXPR`; done
matemática
fonte
seu script não funciona para mim "renomear ACDC AC-DC ACDC *" resultado-> "ssed: não pode ler ACDC: não existe esse arquivo ou diretório", instalei renomear util a partir do linux e agora funciona de qualquer maneira
holms
5

Você pode tentar instalar o MacPorts e instalar o renameutilspacote:

renameutils @ 0.10.0 (sysutils)

renameutils é um conjunto de programas criados para tornar a renomeação de arquivos mais rápida e menos complicada

lajuette
fonte
este pacote não possui o comando "renomear".
Juanpablo
11
eu não disse que sim. qmvparece que faz o trabalho.
precisa saber é o seguinte
qmvé uma grande ferramenta, enquanto um pouco muito trabalho para renomeações regex simples, é fantástico para inteligentemente nomeação e mover grandes quantidades de arquivos arbitrários
sapht
4

Existem várias versões de renomeação . Parece que você está procurando o baseado em Perl.

Uma versão deste utilitário vem com o módulo File :: Rename Perl. Você pode instalá-lo com algo parecido sudo cpan -i File::Rename.

Ou você pode mudar o nome do pacote perl do Debian . É apenas um único arquivo para download. Coloque-o onde quiser e faça o chmod para que seja executável.


Uma alternativa é a ferramenta zmv que acompanha o zsh . Ele não possui a mesma sintaxe, mas vem com o sistema operacional e pode cuidar facilmente de muitos casos comuns.

Chris Johnsen
fonte
o perl rename é o que esta pergunta mostra como um exemplo.
quack quixote
2

Nos Macs, uso o Aristotle Pagaltzis disponível gratuitamente rename, que, como o Debian, é baseado em Perl. Você pode obtê-lo aqui . Ou visite aqui para ler primeiro - sempre uma boa ideia.

Você precisa colocá-lo em algum lugar no seu $PATHe torná-lo executável ( chmod +x rename) e pronto.

Telêmaco
fonte
2

Isso não deve ser difícil, mas aparentemente é. Exemplo, desejo renomear toda a extensão do arquivo de aiff para aifc.

find . -iname "*.aiff" -exec bash -c 'mv "$0" "${0%\.aiff}.aifc"' {} \;
AlexanderN
fonte
1

Se você estiver procurando por uma GUI, tente o Name Mangler . Ele possui um recurso de "visualização" que mostra o que acontecerá se você seguir com a renomeação.

Peter Murray
fonte
1

o comando equivalente no renamer (multiplataforma) é

$ renamer --regex --find 'old_pattern' --replace 'new_pattern' *glob
Lloyd
fonte
0

Se você gosta da seleção múltipla de Sublime Text, pode usá-lo com qmv:

qmv --editor = arquivos "/ usr / bin / s3 -w"

Gordon Wells
fonte
0

Eu apenas fui em frente e encontrei o meu favorito que eu já vi chamado perl-rename, dando o renamecomando onde a ajuda se parece com isso:

Usage: rename [-v] [-n] [-f] perlexpr [filenames]

É assim que eu sei que tenho o que eu gosto.

Para Mac, mesmo em Homebrew, eles têm outros onde me lembro vagamente de ter problemas. Portanto, não é o renamepacote e também não é o renameutilspacote nongnu .

Entendi a partir daqui e apenas fiz a instalação como eles mencionam: https://github.com/subogero/rename

Pysis
fonte