Shell-Parameter-Ersetzung zum Umbenennen von Dateien

Shell-Parameter-Ersetzung zum Umbenennen von Dateien

Ich muss Dateinamen, die mit „foo“ beginnen, in „boo“ umbenennen.

Dies ist das Skript, das ich verwendet habe

#!/bin/sh


for f in *.jpg;
do

mv -- "{$f}" "${f/foo/boo}";


done

aber beim Ausführen erhalte ich einen Fehler bezüglich einer fehlerhaften Ersetzung. Was ist das Problem in meinem Code?

Antwort1

Sie verwenden es /bin/shals Shell, die anscheinend nur einfache sh-Funktionen akzeptiert. Erweiterte Funktionen wie ${//}sind Erweiterungen, die nur in Shells wie Bash verfügbar sind.

Ändern Sie einfach Ihr Ding und alles sollte funktionieren.

Schauen Sie sich auch man rename(manchmal auch prenameWhere genannt rename) von util-linux an. Das sollte genau das tun, was Sie brauchen:

rename 's/^foo/boo/' foo*.jpg

Bei absichtlicher Verwendung /bin/shkönnen Sie Folgendes verwenden:

mv -- "$f" "boo${f#foo}"

Weitere Einzelheiten finden Sie unter man sh.

verwandte Informationen