¿Cómo modifico este script "Comprimir varios archivos" (mac os) para eliminar la extensión de la salida?

¿Cómo modifico este script "Comprimir varios archivos" (mac os) para eliminar la extensión de la salida?

Utilizo este script para comprimir varios archivos en archivos zip individuales (aunque es un servicio automatizador, por lo tanto Bash)

for f in "$@"
do
zip -j "$f.zip" "$f"
done

funciona perfectamente PERO, el archivo zip tiene la extensión en el nombre:

zipme.jpg sale como zipme.jpg.zip

el resultado que busco es: zipme.zip

Sería aún mejor si pudieras dejar la extensión y reemplazar el punto con un guión bajo: zipme_jpg.zip

Muchos de mis clientes tienen problemas con los dos períodos. Ahora los quito a mano después de cerrar la cremallera. ¿Alguien puede decirme cómo arreglar el script?

Respuesta1

Los archivos JPEG ya están comprimidos, no es necesario volver a comprimirlos con zip. Pero podrías usar la eliminación de subcadenas en la expansión de parámetros para eliminar la extensión.

for f in "$@"
do
zip -j "${f%.*}.zip" "$f"
done

Elimina ${f%.*}la extensión del nombre del archivo.

información relacionada