Мне нужно переименовать имена файлов, которые начинаются с «foo» в «boo»
Это скрипт, который я использовал.
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
но при запуске я получаю ошибку неверной подстановки. в чем проблема в моем коде?
решение1
Вы используете /bin/sh
как оболочку, которая, кажется, принимает только простые функции sh. Расширенные функции, такие как ${//}
расширения, доступны только в оболочках, таких как bash.
Просто измените настройки, и все должно заработать.
Также посмотрите man rename
(иногда его называют prename
where rename
is the one from util-linux). Это должно сделать именно то, что вам нужно:
rename 's/^foo/boo/' foo*.jpg
Если вы использовали /bin/sh
намеренно, вы можете использовать:
mv -- "$f" "boo${f#foo}"
Подробности смотрите на man sh.