この「複数のファイルを Zip 圧縮する」スクリプト (Mac OS) を変更して、出力から拡張子を削除するにはどうすればよいですか?

この「複数のファイルを Zip 圧縮する」スクリプト (Mac OS) を変更して、出力から拡張子を削除するにはどうすればよいですか?

私はこのスクリプトを使って複数のファイルを個別のzipファイルに圧縮します(自動化サービスなのでBashです)。

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

完璧に動作しますが、zip ファイルの名前に拡張子が含まれます。

zipme.jpg は zipme.jpg.zip として出力されます。

私が求めている結果は、zipme.zipです。

拡張子を残してピリオドをアンダースコアに置き換えるとさらに良いでしょう: zipme_jpg.zip

私のクライアントの多くは、2 つのピリオドに問題を抱えています。現在は、圧縮後に手動で削除しています。スクリプトを修正する方法を教えていただけますか?

答え1

Jpeg はすでに圧縮されているため、zip で再度圧縮する必要はありません。ただし、パラメータ拡張で部分文字列の削除を使用して拡張子を削除することができます。

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

${f%.*}ファイル名から拡張子を削除します。

関連情報