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 以了解詳細資訊。

相關內容