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.


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

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' _ {} +

kolejny świetny powód do zainstalowania zsh:) .... zmv
danidee


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.

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.