
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.!ut
te 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.