我需要將以“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 以了解詳細資訊。