sustitución de parámetros de shell para cambiar el nombre de archivos

sustitución de parámetros de shell para cambiar el nombre de archivos

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/shcomo 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 prenamedónde renameestá el de util-linux). Esto debería hacer exactamente lo que necesitas:

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

Si lo usaste /bin/shintencionalmente puedes usar:

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

Eche un vistazo a man sh para obtener más detalles.

información relacionada