「foo」で始まるファイル名を「boo」に変更する必要があります。
これは私が使用するスクリプトです。
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
しかし、実行すると重大な代替エラーが発生します。私のコードに何の問題がありますか?
答え1
/bin/sh
一般的なsh機能のみを許可するように見えるシェルを使用しています。拡張などの高度な機能は、${//}
bashなどのシェルでのみ利用可能です。
Shebangを変更すると、すべてがうまく動作します。
また、見てください(man rename
util-linuxでは、「prename
ここはどこにあります」とも呼ばれます)。rename
これにより、正確に必要な操作を実行できます。
rename 's/^foo/boo/' foo*.jpg
興味がある場合は、/bin/sh
以下を使用できます。
mv -- "$f" "boo${f#foo}"
詳しくは man sh をご覧ください。