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/sh
als 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 prename
Where genannt rename
) von util-linux an. Das sollte genau das tun, was Sie brauchen:
rename 's/^foo/boo/' foo*.jpg
Bei absichtlicher Verwendung /bin/sh
können Sie Folgendes verwenden:
mv -- "$f" "boo${f#foo}"
Weitere Einzelheiten finden Sie unter man sh.