Pasar sed a una variable temporal

Pasar sed a una variable temporal

Estoy intentando cambiar de forma masiva algunos archivos en bash que tienen espacios y terminaciones no deseadas en su extensión.

Por ejemplo de

abc.pdf.!ut.!ut

a

abc.pdf

Mostraré todo el progreso en caso de que haya hecho algo más difícil de lo que debería ser. Entonces al principio comencé con algo como

for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut`;
do
 mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

Lo anterior no funcionó para espacios al enviar mv, así que cambié a esto

find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut | while read file
do 
    mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

Esto funcionó casi pero mv comenzó a decir un mensaje arbitrario.

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

¿Estoy pensando demasiado en algo?

Respuesta1

Entonces, si solo deseas eliminar el final, !ut.!utte sugeriría algo como esto:

for file in `find ...`; do
  mv "$file" "${file%.\!ut.\!ut}"
done

En este caso el shell hace su trabajo y elimina el final. Esta característica se llamaexpansión de parámetros.

información relacionada