Friday, August 13, 2010

Easily Convert All Your Zip Archives to 7z Archives

The zip format is the standard for file compression, however many power user and system admin types prefer to use the 7z format because it offers significantly better compression ratios. The zip format does have a few things going for it such as speed (relative to other compression formats) and application support.

So to get the best of both worlds, we have created a script which will convert your zip files into 7z files with a single command, a process we are calling “deep archiving”.

Practical Uses

So why would you need this script when you could just create 7z archives to begin with? Here are a couple reasons:

  1. Certain applications may only produce zip format archives.
  2. Since zip compression is faster than 7z compression, you may want to quickly produce a zip file and then “deep compress” it later.

Consider this scenario:

You run an FTP site where customers upload data to you in zip format. Your users then download and use the data as needed but you want to keep these files for a while just in case you your users need them again (in which case you are a hero for having them readily available). In order to save some space, you could convert the zip archives to 7z format and stash them away.

Alternately, replace customer uploaded data from the scenario above with backed up user data (or whatever else you can think of) and you can see there are many practical applications for this.

The Script

@ECHO OFF ECHO Deep Archive ECHO Written by: Jason Faulkner ECHO SysadminGeek.com ECHO. ECHO.  REM Takes a Zip file and recompresses it as 7z archive. REM Script process: REM    1. Decompress the existing archive. REM    2. Compress the extracted files in 7z format. REM    3. (optional) Validate the new 7z file. REM    4. (optional) Delete the source archive. REM REM Usage: REM DeepArchive ZipFile REM REM Requirements: REM    The 7-Zip command line tool (7za.exe) is in a location set in the PATH variable. REM REM Additional Notes: REM This script processes a single zip archive. REM To process all zip archives in a folder, use the ForFiles command from the command line: REM    FORFILES /P "path\to\zip\files" /M *.zip /C "cmd /c DeepArchive @path" REM REM To run the archive compression/decompression as low priority background processes REM add this in front of the 7ZA commands (DO NOT add this in front of the validation 7ZA command): REM    START /BelowNormal /Wait REM Adding the above command will use a new window to perform these operations.  SETLOCAL EnableExtensions EnableDelayedExpansion  REM Should the deep archive file be validated? (1=yes, 0=no) SET Validate=0  REM Compression level: 1,3,5,7,9 (higher=slower but more compression) SET CompressLevel=5  REM Delete source zip file on success? (1=yes, 0=no) SET DeleteSourceOnSuccess=1  REM ---- Do not modify anything below this line ----  SET ArchiveFile=%1 SET DeepFile=%ArchiveFile:.zip=.7z% SET tmpPath=%TEMP%\%~nx1 SET tmpPathZip="%tmpPath%\*" SET tmpPath="%tmpPath%" SET tmpFile="%TEMP%\tmpDeepArchive.txt"  IF NOT EXIST %tmpPath% ( MKDIR %tmpPath% ) ELSE ( RMDIR /S /Q %tmpPath% )  ECHO Extracting archive: %ArchiveFile% 7ZA x %ArchiveFile% -o%tmpPath% ECHO.  ECHO Compressing archive: %DeepFile% 7ZA a -t7z -mx%CompressLevel% %DeepFile% %tmpPathZip% ECHO.  IF {%Validate%}=={1} ( ECHO Validating archive: %DeepFile% 7ZA t %DeepFile% | FIND /C "Everything is Ok" > %tmpFile% SET /P IsValid=< %tmpFile% IF !IsValid!==0 ( ECHO Validation failed! DEL /F /Q %DeepFile% ECHO. GOTO Fail ) ELSE ( ECHO Validation passed. ) ECHO. ) GOTO Success  :Success IF {%DeleteSourceOnSuccess%}=={1} DEL /F /Q %ArchiveFile% ECHO Success GOTO End  :Fail ECHO Failed GOTO End  :End IF EXIST %tmpFile% DEL /F /Q %tmpFile% IF EXIST %tmpPath% RMDIR /S /Q %tmpPath%  ENDLOCAL

Links

Download DeepArchive Script from SysadminGeek.com

Download 7-Zip Command Line Tool

Posted via email from ://allthings-bare

No comments:

Post a Comment