Necesito cambiar el nombre de los archivos que comienzan con "foo" a "boo"
Este es el script que usé
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
pero cuando lo ejecuto me sale un error de sustitución incorrecto. ¿Cuál es el problema en mi código?
Respuesta1
Está utilizando /bin/sh
como shell, que parece aceptar solo características sh simples. Las funciones avanzadas, como ${//}
las extensiones, solo están disponibles en shells como bash.
Simplemente cambia tu shebang y todo debería funcionar.
También eche un vistazo a man rename
(a veces llamado prename
dónde rename
está el de util-linux). Esto debería hacer exactamente lo que necesitas:
rename 's/^foo/boo/' foo*.jpg
Si lo usaste /bin/sh
intencionalmente puedes usar:
mv -- "$f" "boo${f#foo}"
Eche un vistazo a man sh para obtener más detalles.