Wie kann ich viele Dateien mit einem regulären Ausdruck umbenennen?

20

Ich möchte viele Dateien unter Mac OS X (10.7.2) umbenennen. Ich habe nicht das Perl-Paket für den renameBefehl.

Meine Dateien haben Namen wie "T452-102456-0.png" und ich möchte den Teil "-0" löschen. Ich weiß, dass ich diese Aktion ausführen kann, indem ich mein eigenes PHP-CLI-Skript schreibe, aber ich möchte eine einfachere und schnellere Lösung kennen.

Raphaël
quelle
Gibt es keinen logischen Widerspruch zwischen "Viele PDF-Dateien" und "Meine Dateien haben Namen wie" T452-102456-0.png ""?
Manatwork
Oh ... die Art der Dateien spielt keine Rolle, aber es ist wahr ^^. Ich bearbeite, danke für Ihren Kommentar =)
Raphaël

Antworten:

21

Bash oder Ksh zusammen mit mvkönnte es lösen:

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

Falls der Dateiname auch nach dem ersten Bindestrich "0" hat und das "-0" immer vor dem Punkt steht, können Sie diesen Punkt auch in den Ausdruck einschließen:

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

Da diese Umbenennungsregel jedoch einfach ist, können Sie sie auch mit renamedem Paket util-linux ausführen :

rename '-0.' '.' *.png
Mann bei der Arbeit
quelle
es funktioniert einwandfrei. Vielen Dank =)
Raphaël
3

Einfache Methode: Dateien nur im aktuellen Verzeichnis

Mit zsh:

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

Mit anderen Muscheln:

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


Erweiterte Methode: Dateien im aktuellen Verzeichnis und / oder Unterverzeichnissen

Mit zsh:

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

Mit ksh93:

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

Mit bash ≥4, wie oben, aber shopt -s globstaranstelle des setBefehls verwenden.

Mit anderen Muscheln:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Gilles 'SO - hör auf böse zu sein'
quelle
Ein weiterer guter Grund, zsh zu installieren:) .... zmv
danidee
2

In Fish Shell unter OSX:

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

Fish Shell: https://fishshell.com/

Jeffmcneill
quelle
2
Und aus welchem ​​Grund abstimmen? Dies ist eine gültige Antwort auf die Frage.
Jeffmcneill
0

Wenn Sie das mmvPaket haben:

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

Wie bei (neueren Versionen von) renamewird auch hier angemessen darauf geachtet, dass vorhandene Dateien nicht überschrieben werden.

Toby Speight
quelle