Jak mogę zmienić nazwę wielu plików za pomocą wyrażenia regularnego?

20

Chcę zmienić nazwę wielu plików w systemie Mac OS X (10.7.2) .. Nie mam pakietu perla dla tego renamepolecenia.

Moje pliki mają nazwy takie jak „T452-102456-0.png” i chcę usunąć część „-0”. Wiem, że mogę to zrobić, pisząc własny skrypt php-cli, ale chciałbym wiedzieć o łatwiejszym i szybszym rozwiązaniu.

Raphaël
źródło
Czy nie ma logicznej sprzeczności między „dużą ilością plików pdf” a „Moje pliki mają nazwy takie jak„ T452-102456-0.png ””?
manatwork
Och ... rodzaj plików nie ma znaczenia, ale to prawda ^^. Edytuję, dziękuję za komentarz =)
Raphaël,

Odpowiedzi:

21

Bash lub Ksh razem z mvmogłyby rozwiązać to:

for f in *.png; do mv -n "$f" "${f/-0}"; done

Jeśli nazwa pliku może mieć również „0” po pierwszym myślniku, a „-0” jest zawsze przed kropką, możesz również dodać tę kropkę do wyrażenia:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Ale ponieważ ta reguła zmiany nazwy jest prosta, jeśli masz renamez pakietu util-linux , to też to zrobi:

rename '-0.' '.' *.png
człowiek w pracy
źródło
działa idealnie. Dziękuję bardzo =)
Raphaël
3

Prosta metoda: pliki tylko w bieżącym katalogu

Z zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

Z innymi pociskami:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Metoda ulepszona: pliki w bieżącym katalogu i / lub podkatalogach

Z zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Z ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

Z uderzeniem ≥4, jak wyżej, ale użyj shopt -s globstarzamiast setpolecenia.

Z innymi pociskami:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Gilles „SO- przestań być zły”
źródło
kolejny świetny powód do zainstalowania zsh:) .... zmv
danidee
2

W Fish Shell na OSX:

for f in *.png; mv -n $f (basename $f -0.png).png; end

Fish Shell: https://fishshell.com/

jeffmcneill
źródło
2
I z jakiego powodu? To jest prawidłowa odpowiedź na pytanie.
jeffmcneill
0

Jeśli masz mmvpakiet:

mmv '*-0.png' '#1.png'

Podobnie jak (ostatnie wersje) rename, dołoży to wszelkich starań, aby uniknąć zastąpienia istniejących plików.

Toby Speight
źródło