7z fins a dia d'avui ofereix una de les millors ratios de compressió. Ara bé, com totes les eines, 7z pot ser configurat amb diferents paràmetres segons els interessos de l'usuari, com per exemple donar més importància a la taxa de compressió enfront la vel·locitat de compressió o a l'inrevés. Aquests 2 scripts que proposo aquí, són els que faig servir jo per les 2 situacions en les que em trobo que vull comprimir arxius:
1. Comprimeix qualsevol arxiu o directori (i els seus respectius arxius i subdirectoris, per tant és recursiu) utilitzant la comanda amb la que donem nom: ./exemple.sh nom_arxiu o ./exemple.sh nom_directori i 7z crearà un arxiu amb extensió 7z, amb el mateix nom base de l'arxiu o directori que haguem entrat per paràmetre. ./exemple.sh nom_arxiu.mp3 crearia l'arxiu arxiu.mp3.7z o ./exemple.sh nom_directori crearia un arxiu nom_directori.7z
#!/bin/sh
base=`echo $1 | sed 's/ /_/g' | tr -d '()/'`
/usr/bin/7z a -mx=9 -mmt=on -r $base.7z "$1"
2. Comprimeix TOTS els directoris dins del subdirectori on estiguem, però crea un arxiu 7z per a cada directori, el qual m'és sumament útil (Si tenim 4 carpetes per exemple, aquest script genera 4 arxius 7z amb el nom base de cada carpeta + l'extensió 7z).
#!/bin/bash
for folder in */
do
base=`echo $folder | sed 's/ /_/g' | tr -d '()/'`
/usr/bin/7z a -mx=9 -mmt=on -r $base.7z "$folder"
done
NOTA IMPORTANT: A més, tot sovint utilitzo aquesta opció -v3g que el que fa és que limita els arxius a 3GB (per qüestions de tamany de FAT32, hi poso 3GB ja que el paràmetre acceptat només és de Gigabyte natural, és a dir, 1GB, 2GB, 3GB, 4GB, 5GB etc.) de manera que si es necessiten més de 3GB, 7z generarà més d'un arxiu, amb extensio 00X. Per exemple per a un arxiu amb 7z de 4GB, es generar un arxiu1.7z.001 i un arxiu2.7z.002. El problema d'això (bé, més que problema, molestia, és que si afegim aquest paràmetre al script, totes les compressions de només 1 arxiu 7z es generaran amb 001 (arxiu.7z.001) i a mi personalment no m'acaba d'agrada perque pot dur confusió amb d'altres tipus d'arxius com HJSplit (a Linux, hi ha la variant que funciona igual anomenada LXSplit). La solució és o bé separar les carpetes que ocupin més de 3GB i les que ocupin fins a 3GB en 2 subcarpetes (exemple, 2 carpetes, una que conté 5 carpetes que ocupen 2, 2, 2,1 i 1 GB, i una altra carpeta que conté 3 carpetes de 4, 5 i 6 GB) de manera que en les carpetes que ocupin menys de 3GB no adherim el paràmetre -v3g al script i en les altres carpetes si l'adherim, o bé utilitzem la comanda rename per renombrar els arxius generats per 7z que només tinguin un arxiu *.7z.001 de la manera que proposo més abaix, de manera que ja no hem de modificar l'script, deixant el paràmetre -v3g sempre per a l'script:
xddxdd@debian:~$ rename 's/\.7z.001/\.7z/' *.7z.001
No hay comentarios:
Publicar un comentario