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)?


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.


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 .


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

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


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.


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.


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"' {} \;

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.


1

o comando equivalente no renamer (multiplataforma) é

$ renamer --regex --find 'old_pattern' --replace 'new_pattern' *glob

0

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

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.