Using zip to package a folder with subfolders

Trevor DeVore lists at mangomultimedia.com
Wed Aug 12 13:10:32 EDT 2009


On Aug 12, 2009, at 1:02 PM, Tereza Snyder wrote:

> I need to zip up a folder that contains files and subfolders. Do I  
> need to use a shell command, or can a sequence of revzip commands do  
> the trick? What script commands are needed?

You can use revZip if you want. Here are two (uncommented) handlers I  
use for zipping/unzipping folders. When zipping you can probably just  
concern yourself with the first 3 params.

Regards,

-- 
Trevor DeVore
Blue Mango Learning Systems
www.bluemangolearning.com    -    www.screensteps.com



-- Leave pFolderPath empty. It is used recursively
command zipAddFolderToArchive pZipArchivePath, pRootFolderPath,  
pIncludeRootFolderInArchiveItemNames, pFilesToExclude,  
pExtensionsThatArentCompressed, pFolderPath
     local theArchiveItemName,theCharNo,theError,theFile
     local theFiles,theFolder,theFolders

     put pIncludeRootFolderInArchiveItemNames is true into  
pIncludeRootFolderInArchiveItemNames
     set the wholematches to true

     replace comma with cr in pExtensionsThatArentCompressed

     if pFolderPath is empty then
         put pRootFolderPath into pFolderPath	
         if pIncludeRootFolderInArchiveItemNames then
             set the itemdel to slash	# we want folder to be reflected  
in archive item name
             delete item -1 of pRootFolderPath
         end if
     end if

     put fileFilesInFolder(pFolderPath, true, true) into theFiles
     filter theFiles without ".DS_Store"
     set the itemdel to "."

     repeat for each line theFile in theFiles
         if theFile is among the lines of pFilesToExclude then next  
repeat

         put theFile into theArchiveItemName
         put offset(pRootFolderPath, theArchiveItemName) into theCharNo
         if theCharNo is 0 then return "file is not in expected folder"

         delete char 1 to (the number of chars of pRootFolderPath + 1)  
of theArchiveItemName	# strip root folder up to slash (zip item names  
shouldn't start with a slash)

         if item -1 of theArchiveItemName is among the lines of  
pExtensionsThatArentCompressed then
             revZipAddUncompressedItemWithFile pZipArchivePath,  
theArchiveItemName, theFile
         else
             revZipAddItemWithFile pZipArchivePath,  
theArchiveItemName, theFile
         end if
         if the result is not empty then
             put the result into theError
             exit REPEAT
         end if
     end REPEAT

     if theError is empty then
         put fileFoldersInFolder(pFolderPath, true, true) into  
theFolders
         repeat for each line theFolder in theFolders
             zipAddFolderToArchive pZipArchivePath, pRootFolderPath,  
pIncludeRootFolderInArchiveItemNames, pFilesToExclude,  
pExtensionsThatArentCompressed, theFolder
             put the result into theError
             if theError is not empty then
                 exit REPEAT
             end if
         end REPEAT
     end if

     return theError
end zipAddFolderToArchive


command zipDecompressArchiveToFolder pZipArchivePath, pOutputFolder,  
pItemsToExclude, pCallbackHandler
     local theError

     if the last char of pOutputFolder is slash then delete the last  
char of pOutputFolder

     set the wholematches to true
     put the filetype into theFileType
     set the filetype to empty

     put revZipEnumerateItems(pZipArchivePath) into theArchiveItems
     put the number of lines of theArchiveItems into theItemCount

     repeat for each line theArchiveItem in theArchiveItems
         add 1 to i

         if theArchiveItem is among the lines of pItemsToExclude then  
next repeat

         put pOutputFolder & slash & theArchiveItem into theFilePath
         put fileExtractDirectory(theFilePath) into theDirectoryPath

         if theDirectoryPath is not pOutputFolder then
             fileCreateAllFoldersInPath theDirectoryPath, pOutputFolder
             put the result into theError
         end if

         if theError is empty then
             if pCallbackHandler is not empty then
                 put CardOf(the long id of the target) into theCard
                 put "send" && quote & pCallbackHandler && "i,  
theItemCount" & quote && "to theCard" into theDo
                 do theDo
             end if

             revZipExtractItemToFile pZipArchivePath, theArchiveItem,  
theFilePath
             put the result into theError
         end if

         if theError is not empty then exit REPEAT
     end REPEAT

     set the filetype to theFileType

     return theError
end zipDecompressArchiveToFolder



More information about the use-livecode mailing list