Convertir un número de archivo zip a rar?

5

Cualquier sugerencia de cómo convertir decenas de zip archivos a rar ¿formato? Aplicación o herramienta de línea de comandos son bienvenidos.

ohho
fuente
¿Por qué quieres hacer eso?
lhf
Hay un visor de cómics que funciona bien con .rar archivos pero no .zip archivos.
ohho

Respuestas:

5

Lo que podrías hacer es hacer un pequeño archivo por lotes que usaría RAR , una utilidad de línea de comandos shareware para mac (no encontré ninguna utilidad de línea de comandos rar gratuita, pero RAR está disponible como versión de prueba).

Instalando el comando rar

Para instalar RAR en su terminal, simplemente copie rar y unrar en tu bin carpeta.

Para acceder a la bin Directorio, abre Terminal.app y escribe

open ­/bin

La versión de Windows de RAR permite "convertir" zip archivar en rar Archivo en herramientas, pero la versión mac no parece tener esta característica. La solución consistiría en descomprimir cada uno de los archivos en carpetas separadas y luego en el contenido RAR de esas carpetas de inmediato.

La solución

#!/bin/bash
# shell script that will convert zip files into rar files
# Require RAR for Mac os x to be placed in bin folder

# Working directory, use ~ for home folder shortcut :)
WorkingDirectory=~/test

# Temp directory that will be used for zip files manipulation
# Will prevent loop from raring other folders ;)
TempDirectory="${WorkingDirectory}"/zipToRarTemp

# Target Directory is where you want the rar files to go after the process
TargetDirectory="${WorkingDirectory}"

# Let's create the directories
mkdir "${TempDirectory}"
mkdir "${TargetDirectory}"

# Will loop into WorkingDirectory and unzip each .zip files
for file in "${WorkingDirectory}"/*.zip
do
    # Get file name
    # See http://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash
    # 1st answer
    filename=$(basename "$file")
    extension="${filename##*.}"
    filename="${filename%.*}"

    # Temp folder in the loop
    tempFolderToRar="${TempDirectory}"/"${filename}"

    # Create folders to rar later
    mkdir "${tempFolderToRar}"

    # unzip -d folder/extract/to fileToExtract.zip
    unzip -d "${TempDirectory}"/"${filename}" "${file}"

    # rar all the files in tempFolderToRar into the target
    rar a "${TargetDirectory}"/"${filename}".rar "${tempFolderToRar}"
done

# Optionnaly, delete temp directory if different from target
if [ "${TempDirectory}" != "${TargetDirectory}" ]
    then
    rm -r "${TempDirectory}"
fi

Guarde esto en un archivo sin extensión, asegúrese de establecer las rutas correctas en las primeras variables y debería funcionar bien ejecutándolo en terminal.app

Conclusión

Bueno, funcionó para mí.

Nota: este script no es perfecto. Tal vez haya una mejor manera, pero funciona;) esa fue una de mis primeras secuencias de comandos de shell, probablemente sería mejor con los parámetros, o ir con python;)

Espero eso ayude.

GabLeRoux
fuente
Si cada programador novato de bash escribiera código de esta calidad, ¡el mundo de los scripts sería un lugar mejor! Bien hecho.
nohillside
Gracias, ese es mi primer guión de bash siempre ^^. Escribí muchos comentarios para propósitos de aprendizaje
GabLeRoux
1
rm -r ${TempDirectory}, mkdir ${TempDirectory}y mkdir ${TargetDirectory} También debe ser doble cita. Probablemente deberías usar algo como mktemp -td o mkdir /tmp/$(uuidgen) para crear el directorio temporal. Los archivos en los archivos rar se extraen a $PWD/$TempDirectory.
Lri
4

Aquí hay un script más simple como el publicado por GabLeRoux. rar se puede descargar desde desde http://www.rarlab.com/download.htm .

#!/bin/bash

for f in ~/Desktop/*.zip; do
    d=/tmp/$(uuidgen)
    unzip "$f" -d $d
    cd "$d"
    rm -rf __MACOSX
    ~/bin/rar a "${f%zip}rar" *
    rm -r "$d"
done
Lri
fuente
Err, hay un cd .. falta en algún lugar :-)
nohillside
¿Qué quieres decir? La expresión glob al comienzo es ~/Desktop/*.zip sólo para probar.
Lri
Usted ingresa en $ d pero, ¿de dónde sale nuevamente del directorio?
nohillside
1
La PWD al final no importaría a menos que el script haga algo después de convertir los archivos. Se podría mantener ejecutando el script en una subshell con ( ) o con algo como oldpdw="$PWD" ... cd "$oldpwd".
Lri
Únete a mí en chat.stackexchange.com/rooms/4519/room-for-patrix-and-lri para seguir discutiendo
nohillside