Entfernen Sie alle Erweiterungen in zsh - zsh

Angenommen, ich habe ein Verzeichnis mit vielen Dateien mit der Erweiterung .bak und möchte diese von jedem entfernen. Was ist der einfachste Weg, das zu tun? Ich meine einen Befehl, der das tut, was man erwarten könnte mv *.bak *.

Antworten:

3 fĂĽr Antwort â„– 1

Mit zmv

Zsh hat zmv, die eine sehr einfache Oberfläche zum Umbenennen (oder Kopieren) von Dateien bietet:

autoload zmv
zmv "(*).bak" "$1"

Jedes Klammerpaar erfasst eine Gruppe, auf die dann mit zugegriffen werden kann $1, $2, und so weiter. Hier sind noch einige Beispiele.

Ein anderer Weg, um es mit zu tun zmv ist das zu benutzen -W Option, die fĂĽr einfache Umbenennungsaufgaben funktioniert:

zmv -W "*.bak" "*"

Der einfachste Weg zu haben zmv Immer verfĂĽgbar ist das zu setzen autoload zmv Aussage in Ihrem ~/.zshrc.


Mit Bash-Syntax

Wenn Sie eine "normale" Bash-Syntax mit Zeichenfolgenmanipulation verwenden möchten, geschieht dies folgendermaßen:

for f in *.bak; do mv -- "$f" "${f%.bak}"; done

Mit dem rename Werkzeug

Da ist ein rename Tool, das unter einigen Linux-Betriebssystemen und unter OS X verfĂĽgbar ist brew install rename.

rename "s/.bak$//" *

Das $ ist erforderlich, um das Ende der Zeichenfolge und nicht Teile in der Mitte der Dateinamen zu erfassen, die zufällig enthalten sind .bak.


0 fĂĽr Antwort â„– 2

Neben den guten Antworten gibt es auch die sehr Ein altmodischer Weg, der auf jedem POSIX-kompatiblen System funktionieren sollte - auch ohne eine moderne Shell wie bash oder zsh:

for f in *.bak; do mv $f `echo $f | sed -e "s/.bak$//"`; done