Cambiar el final de varios nombres de archivos similares

Cambiar el final de varios nombres de archivos similares

Tengo muchos archivos que se parecen a este:

56.mp3?referredby=rss

Lo que quiero hacer es eliminarlos ?referredby=rsspara que queden así:

56.mp3

¿Cómo haría esto?

Respuesta1

Si tienes Perl rename, es tan fácil como

rename 's/\?referredby=rss//' ./*referredby=rss

Con util-linux rename:

rename '?referredby=rss' '' ./*referredby=rss

Respuesta2

Aparte de escapar del ?(que tiene un significado especial en las expresiones globales), esto realmente no es diferente de cambiar el nombre de cualquier otro archivo: por ejemplo, podría usar un bucle de shell simple

for f in *.mp3\?referredby=rss; do mv -- "$f" "${f%\?*}"; done

¿Dónde ${f%\?*}hay una expansión de parámetros de shell que elimina la coincidencia de elementos finales más corta?\?*

información relacionada