ファイル名を変更するためのシェルパラメータの置き換え

ファイル名を変更するためのシェルパラメータの置き換え

「foo」で始まるファイル名を「boo」に変更する必要があります。

これは私が使用するスクリプトです。

#!/bin/sh


for f in *.jpg;
do

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


done

しかし、実行すると重大な代替エラーが発生します。私のコードに何の問題がありますか?

答え1

/bin/sh一般的なsh機能のみを許可するように見えるシェルを使用しています。拡張などの高度な機能は、${//}bashなどのシェルでのみ利用可能です。

Shebangを変更すると、すべてがうまく動作します。

また、見てください(man renameutil-linuxでは、「prenameここはどこにあります」とも呼ばれます)。renameこれにより、正確に必要な操作を実行できます。

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

興味がある場合は、/bin/sh以下を使用できます。

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

詳しくは man sh をご覧ください。

関連情報