「foo」で始まるファイル名を「boo」に変更する必要があります
これは私が使用したスクリプトです
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
しかし、実行すると不正な置換エラーが発生します。コードの問題は何でしょうか?
答え1
/bin/sh
をシェルとして使用していますが、これは単純な sh 機能のみを受け入れるようです。 のような高度な機能は${//}
、bash などのシェルでのみ利用可能な拡張機能です。
シェバンを変更するだけで、すべてが機能するはずです。
man rename
また、 ( util-linux のprename
where is と呼ばれることもあります)も参照してくださいrename
。これで必要な操作が正確に実行されるはずです。
rename 's/^foo/boo/' foo*.jpg
意図的に使用する場合は、以下/bin/sh
を使用できます。
mv -- "$f" "boo${f#foo}"
詳細については man sh を参照してください。