Rinominare molti file in Mac OS X, elaborazione batch


57

Ho usato per rinominare il file in Linux tramite un comando di rinomina:

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

C'è qualcosa di simile in Mac OS X (Snow Leopard)?


Il seguente articolo spiega come installare renamesu Mac OS X: macosxhints.com/article.php?story=20050630022203488
Paul R

I backtick non vengono visualizzati nel tuo commento: probabilmente dovresti aggiungerlo come risposta o modificare la tua domanda per includere la soluzione.
Paul R,

1
La migliore soluzione rapida che abbia mai trovato è stata quella di utilizzare l'Automator integrato. Dai
nilay

Vorrei votare la risposta di nilay se non fosse un commento ...
voidstate

Risposte:


49

Con Homebrew , un gestore di pacchetti per OS X:

brew install rename 

Quindi è possibile eseguire gli stessi renamecomandi di Linux.


3
Puoi anche usare il pacchetto MacPorts: port install p5-file-rename
Miquel Adrover

2
@MiquelAdrover: Ma con la porta devi usare rename-5.22(dove 22 è la versione installata) invece direname
mems

Puoi rinominare il link simbolicosudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ako

26

Usa saggiamente la potenza di ZSH (digita zshil terminale se sei una di quelle povere anime che non la usano di default):

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

ZMV segue la sintassi MMV .


ma ciò consente anche la sostituzione di regex? Questo sembra essere solo una sorta di potenziamento del guscio della shell.
matematica,

4
@brubelsabs: Sì, zmv può eseguire la sostituzione di regexp . Per i file corrispondenti *user*.html, cambia l'estensione in .htmle cambia tutte le occorrenze di rcin final: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: Penso che l' esempio zmv nelle tue risposte abbia bisogno -wo parentesi attorno al suo carattere jolly.
Chris Johnsen,

Mi piace molto questo suggerimento perché non è necessario installare nulla in più su un Mac (come brew), ma ti permette di usare la semplice sintassi di mmv come.
Hay,

+1 Nizza. Un paio di differenze rispetto alle regex a cui sono abituato: 1) usare *invece di .*ottenere tutto. *?sembra funzionare come non avido .*?. 2) per me, ^e $per l'inizio e la fine della stringa sembrava non corrispondere a nulla
user56reinstatemonica8

21

Goffo me:

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

E se vuoi usarlo come faccio spesso in questo modo:

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

Consiglio di usare questo script litte in ~ / bin / rename:

#!/usr/bin/env zsh
SUBSEXPR=$1
shift
for i in $@; do mv $i `echo "$i" | sed $SUBSEXPR`; done

lo script non funziona per me "rinomina ACDC ACDC ACDC *" result-> "ssed: non può leggere ACDC: No such file or directory", ho installato Rinomina util da linux ed ora funziona anwyay
Holms

5

Puoi provare a installare MacPorts e installare il renameutilspacchetto:

renameutils @ 0.10.0 (sysutils)

renameutils è un insieme di programmi progettati per rendere la ridenominazione dei file più rapida e meno ingombrante


questo pacchetto non ha il comando "rinomina".
juanpablo,

1
non ho detto che lo fa. qmvsembra che faccia il lavoro.
lajuette,

qmvè un ottimo strumento, mentre un po 'troppo lavoro per semplici rinominazioni regex, è fantastico per nominare in modo intelligente e spostare un gran numero di file arbitrari
sapht

4

Esistono varie versioni di rinomina . Sembra che tu stia cercando quello basato sul Perl.

Una versione di questa utility viene fornita con il modulo File :: Rename Perl. Puoi installarlo con qualcosa del genere sudo cpan -i File::Rename.

Oppure, si potrebbe andare con la ridenominazione dal pacchetto perl Debian . È solo un singolo file da scaricare. Mettilo dove vuoi e chmod in modo che sia eseguibile.


Un'alternativa è lo strumento zmv fornito con zsh . Non ha la stessa sintassi, ma viene fornito con il tuo sistema operativo e può facilmente occuparsi di molti dei casi più comuni.


il nome del perl è ciò che questa domanda mostra come esempio.
Quack Quixote,

2

Su Mac uso Aristotele Pagaltzis liberamente disponibile rename, che come Debian è basato sul Perl. Puoi ottenerlo qui . Oppure visita qui per leggerlo prima, sempre una buona idea.

Devi posizionarlo da qualche parte nel tuo $PATHe renderlo eseguibile ( chmod +x rename) e poi sei a posto.


2

Questo non dovrebbe essere difficile ma a quanto pare lo è. Esempio, voglio rinominare l'estensione di tutti i file da aiff a aifc.

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

1

Se stai cercando una GUI, prova Name Mangler . Ha una funzione di "anteprima" che mostra cosa accadrà se segui la ridenominazione.


1

il comando equivalente in renamer (multipiattaforma) è

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

0

Se ti piace la selezione multipla di Sublime Text, puoi usarla con qmv:

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


0

Sono appena andato avanti e ho trovato il mio preferito che ho visto chiamato perl-rename dando il renamecomando in cui l'aiuto è simile al seguente:

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

È così che so di aver ottenuto quello che mi piace.

Per Mac, anche in Homebrew ne hanno altri in cui ricordo vagamente di aver avuto problemi. Quindi non è il renamepacchetto e non è nemmeno il renameutilspacchetto nongnu .

Capito da qui e appena fatto l'installazione come menzionano: https://github.com/subogero/rename

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.