こちらも生成AIで作った。ファイル名を_rar2zip.shとかにしておいて、bash _rar2zip.shで実行するとフォルダ内のrarファイルをzipにしてくれる。入れ子のrarもzipにできる。はず。圧縮率は (cd "$TMP_DIR" && zip -r -0 "../${base_name}.zip" .) の部分の-0で調整できる
#!/bin/bash TMP_DIR="tmp" if ! command -v unrar &>/dev/null || ! command -v zip &>/dev/null; then echo "エラー: unrar または zip がインストールされていません。" exit 1 fi SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" for rar_file in "$SCRIPT_DIR"/*.rar; do [ -f "$rar_file" ] || continue base_name=$(basename "$rar_file" .rar) echo "処理中: $rar_file" rm -rf "$TMP_DIR" mkdir -p "$TMP_DIR" unrar x -y "$rar_file" "$TMP_DIR/" function convert_rar_to_zip { local dir="$1" find "$dir" -type f -name "*.rar" | while read -r inner_rar; do inner_base=$(basename "$inner_rar" .rar) inner_dir="${inner_rar}_extracted" mkdir -p "$inner_dir" echo " - 内部RAR展開: $inner_rar" unrar x -y "$inner_rar" "$inner_dir/" echo " - 内部RARをZIP化: ${inner_base}.zip" (cd "$inner_dir" && zip -r -0 "../${inner_base}.zip" .) rm -rf "$inner_dir" rm -f "$inner_rar" done } convert_rar_to_zip "$TMP_DIR" echo "ZIPに圧縮中: ${base_name}.zip" # tmpフォルダ内のファイルだけを圧縮(tmpフォルダ自体は含まれない) (cd "$TMP_DIR" && zip -r -0 "../${base_name}.zip" .) rm -rf "$TMP_DIR" echo "完了: ${base_name}.zip" done echo "すべてのRARファイルの変換が完了しました!"