我需要将以“foo”开头的文件名重命名为“boo”
这是我使用的脚本
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
但是当我运行时,我遇到了严重的替换错误。我的代码有什么问题?
答案1
您正在使用/bin/sh
shell,它似乎只接受普通的 sh 功能。诸如扩展之类的高级功能${//}
仅在 bash 等 shell 中可用。
只要改变你的 shebang,一切都会正常。
另请看一下man rename
(有时称为util-linux 中的“ prename
where is the one”)。rename
这应该完全满足您的需要:
rename 's/^foo/boo/' foo*.jpg
如果你/bin/sh
有意使用,你可以使用:
mv -- "$f" "boo${f#foo}"
查看 man sh 了解详细信息。