Zmiana nazwy wielu plików w systemie Mac OS X, przetwarzanie wsadowe


57

Kiedyś zmieniałem nazwę pliku w systemie Linux za pomocą polecenia zmiany nazwy:

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

Czy jest coś podobnego w Mac OS X (Snow Leopard)?


Poniższy artykuł wyjaśnia, jak zainstalować renamew systemie Mac OS X: macosxhints.com/article.php?story=20050630022203488
Paul R

Backticks nie pojawiają się w twoim komentarzu - prawdopodobnie powinieneś dodać to jako odpowiedź lub edytować swoje pytanie, aby uwzględnić swoje rozwiązanie.
Paul R

1
Najlepszym szybkim rozwiązaniem, jakie kiedykolwiek znalazłem, jest użycie wbudowanego Automatora. Sprawdź ten artykuł, aby uzyskać łatwą pomoc krok po kroku: tuaw.com/2008/11/11/…
nilay

Głosowałbym za odpowiedzią Nilay, gdyby nie był to komentarz ...
voidstate

Odpowiedzi:


49

W Homebrew menedżer pakietów dla OS X:

brew install rename 

Następnie możesz uruchomić te same renamepolecenia, co w systemie Linux.


3
Możesz także użyć pakietu MacPorts: port install p5-file-rename
Miquel Adrover

2
@MiquelAdrover: Ale z portem musisz użyć rename-5.22(gdzie 22 to zainstalowana wersja) zamiastrename
mems

Możesz zmienić nazwę dowiązania symbolicznegosudo mv /opt/local/bin/rename-XXX /opt/local/bin/rename
Ako

26

Mądrze używaj mocy ZSH (wpisz zshterminal, jeśli jesteś jedną z tych biednych dusz, które domyślnie go nie używają):

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

ZMV działa zgodnie ze składnią MMV .


ale czy to również umożliwia wymianę wyrażeń regularnych? Wydaje się, że to tylko rodzaj ulepszonego globowania powłoki.
matematyka

4
@brubelsabs: Tak, zmv może zastąpić wyrażenia regularne . W przypadku pasujących plików *user*.htmlzmień rozszerzenie na .htmli zmień wszystkie wystąpienia rcna final: zmv '(*user*).htm' '${1//rc/final}.html' @ghoppe: Myślę, że przykład zmv w twojej odpowiedzi wymaga -wlub nawiasów otaczających jego symbol wieloznaczny.
Chris Johnsen

Naprawdę podoba mi się ta sugestia, ponieważ nie musisz instalować niczego więcej na komputerze Mac (jak napar), ale pozwala ona na użycie łatwej składni mmv jak.
Hay

+1 ładne. Kilka różnic od wyrażeń regularnych, do których jestem przyzwyczajony: 1) używaj *zamiast .*uzyskiwać wszystkie. *?wydaje się działać jak chciwy .*?. 2) dla mnie ^i $na początku i na końcu łańcucha wydawało się, że powoduje, że nic nie pasuje
user56reinstatemonica8

21

Niezdarny ja:

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

A jeśli chcesz go używać tak jak ja często w ten sposób:

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

Polecam użyć tego skryptu litte w ~ / bin / rename:

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

skrypt nie działa na mnie „zmień ACDC ACDC ACDC *” result-> „ssed: nie można odczytać ACDC: Nie ma takiego pliku lub katalogu”, zainstalowałem przemianować util z linux i teraz działa anwyay
holms

5

Możesz spróbować zainstalować MacPorts i zainstalować renameutilspakiet:

renameutils @ 0.10.0 (sysutils)

renameutils to zestaw programów zaprojektowanych w celu przyspieszenia i mniej kłopotliwej zmiany nazw plików


ten pakiet nie ma polecenia „zmień nazwę”.
juanpablo

1
nie powiedziałem, że tak. qmvwygląda na to, że to działa.
lajuette

qmvto świetne narzędzie, choć trochę za dużo pracy na proste zmiany wyrażeń regularnych, ale fantastycznie nadaje się do inteligentnego nazywania i przenoszenia dużej liczby dowolnych plików
sapht

4

Istnieją różne wersje zmiany nazwy . Wygląda na to, że szukasz Perla.

Jedna wersja tego narzędzia jest dostarczana z modułem File :: Rename Perl. Możesz go zainstalować za pomocą czegoś takiego sudo cpan -i File::Rename.

Lub możesz zmienić nazwę z pakietu perla Debiana . To tylko jeden plik do pobrania. Umieść go tam, gdzie chcesz i chmod , aby był wykonywalny.


Alternatywą jest narzędzie zmv dostarczane z Zsh . Nie ma tej samej składni, ale jest dostarczany z systemem operacyjnym i może łatwo zająć się wieloma typowymi przypadkami.


rename Perl co to pytanie pokazuje jako przykład.
quack quixote

2

Na komputerach Mac używam swobodnie dostępnych Aristotle Pagaltzis rename, które podobnie jak Debian, są oparte na Perlu. Możesz go zdobyć tutaj . Lub odwiedź tutaj, aby go najpierw przeczytać - zawsze dobry pomysł.

Musisz umieścić to gdzieś w swoim $PATHpliku i uczynić go wykonywalnym ( chmod +x rename), a potem możesz zacząć.


2

Nie powinno to być trudne, ale najwyraźniej tak jest. Przykład: chcę zmienić nazwę całego rozszerzenia pliku z aiff na aifc.

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


1

równoważne polecenie w zmianie nazwy (wieloplatformowe) to

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

0

Jeśli podoba Ci się zaznaczenie Sublime Text, możesz użyć go z qmv:

qmv --editor = Pliki „/ usr / bin / s3 -w”


0

Właśnie poszedłem naprzód i znalazłem moją ulubioną, którą widziałem, zwaną per-rename, podając renamepolecenie, w którym pomoc wygląda następująco:

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

W ten sposób wiem, że mam ten, który lubię.

W przypadku komputerów Mac nawet w Homebrew mają inne, w których ledwie pamiętam, że miałem problemy. Więc to nie jest renamepakiet i nie jest to także renameutilspakiet nongnu .

Mam go stąd i właśnie wykonałem instalację, jak wspomniano: https://github.com/subogero/rename

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.