shell 参数替换来重命名文件

shell 参数替换来重命名文件

我需要将以“foo”开头的文件名重命名为“boo”

这是我使用的脚本

#!/bin/sh


for f in *.jpg;
do

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


done

但是当我运行时,我遇到了严重的替换错误。我的代码有什么问题?

答案1

您正在使用/bin/shshell,它似乎只接受普通的 sh 功能。诸如扩展之类的高级功能${//}仅在 bash 等 shell 中可用。

只要改变你的 shebang,一切都会正常。

另请看一下man rename(有时称为util-linux 中的“ prenamewhere is the one”)。rename这应该完全满足您的需要:

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

如果你/bin/sh有意使用,你可以使用:

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

查看 man sh 了解详细信息。

相关内容