File: ziptools/ziptools/docetc/1.2-upgrades/verify-1.2-alternate-zip-path.txt
#################################################################################### # Demo 1.2's new "-zip@path" command-line (and "zipat" function) argument, # used to shorten, replace, or omit paths stored in zipfiles - and later # nested in a target unzip folder. This makes "cd"s less necessary. # Thi file's tests were run on Mac OS (Unix), but -zip@ works everywhere. #################################################################################### # Setup export Z=(path to the ziptools install/unzip folder) #---------------------------------------------------------------------------------------- # Default: zip (and unzip) at full given path #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi -skipcruft | tail -n 5 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py Adding file Websites/UNION/cgi/temp.html Adding file Websites/UNION/cgi/test.py Create finished: files=32, folders=4, links=4, unknowns=0, crufts=3. #---------------------------------------------------------------------------------------- # Shorten zipfile paths with -zip@ (extra line appears when given/zipped paths differ) #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi -zip@UNION -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => UNION/cgi/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => UNION/cgi/sitesearch.py Adding file Websites/UNION/cgi/temp.html => UNION/cgi/temp.html Adding file Websites/UNION/cgi/test.py => UNION/cgi/test.py Create finished: files=32, folders=4, links=4, unknowns=0, crufts=3. #---------------------------------------------------------------------------------------- # Zip (and unzip) folder as a top-level, unnested item #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi -zip@. -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => cgi/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => cgi/sitesearch.py Adding file Websites/UNION/cgi/temp.html => cgi/temp.html Adding file Websites/UNION/cgi/test.py => cgi/test.py Create finished: files=32, folders=4, links=4, unknowns=0, crufts=3. #---------------------------------------------------------------------------------------- # Zip (and unzip) folder at a different parent path entirely #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi -zip@other/folder -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => other/folder/cgi/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => other/folder/cgi/sitesearch.py Adding file Websites/UNION/cgi/temp.html => other/folder/cgi/temp.html Adding file Websites/UNION/cgi/test.py => other/folder/cgi/test.py Create finished: files=32, folders=4, links=4, unknowns=0, crufts=3. #---------------------------------------------------------------------------------------- # Zip (and unzip) folder _contents_ as top-level, unnested items #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi/* -zip@. -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => sitesearch.py Adding file Websites/UNION/cgi/temp.html => temp.html Adding file Websites/UNION/cgi/test.py => test.py Create finished: files=31, folders=3, links=4, unknowns=0, crufts=2. #---------------------------------------------------------------------------------------- # Similar, but includes ".*" hidden files allowed by cruft patterns (e.g., .htaccess) #---------------------------------------------------------------------------------------- ~/Desktop$ pushd Websites/UNION/cgi ~/Desktop/Websites/UNION/cgi$ py3 $Z/zip-create.py ../../../testzip . -skipcruft | tail -n 9 Adding file ./sitesearch-savedterms.txt => sitesearch-savedterms.txt Adding file ./sitesearch.py => sitesearch.py Adding file ./temp.html => temp.html Adding file ./test.py => test.py Create finished: files=32, folders=3, links=4, unknowns=0, crufts=3. ~/Desktop/Websites/UNION/cgi$ popd #---------------------------------------------------------------------------------------- # Zip (and unzip) folder _contents_ to another folder path #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi/* -zip@other/folder -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => other/folder/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => other/folder/sitesearch.py Adding file Websites/UNION/cgi/temp.html => other/folder/temp.html Adding file Websites/UNION/cgi/test.py => other/folder/test.py Create finished: files=31, folders=3, links=4, unknowns=0, crufts=2. #---------------------------------------------------------------------------------------- # Zip (and unzip) folder _contents_ to another folder path: folder rename #---------------------------------------------------------------------------------------- ~/Desktop$ pushd Websites/UNION/ ~/Desktop/Websites/UNION$ py3 $Z/zip-create.py testzip cgi/* -zip@newfolder -skipcruft | tail -n 9 Adding file cgi/sitesearch-savedterms.txt => newfolder/sitesearch-savedterms.txt Adding file cgi/sitesearch.py => newfolder/sitesearch.py Adding file cgi/temp.html => newfolder/temp.html Adding file cgi/test.py => newfolder/test.py Create finished: files=31, folders=3, links=4, unknowns=0, crufts=2. #---------------------------------------------------------------------------------------- # Zip folder and selected items as top-levels, inspect with zip-list.py #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi -zip@. -skipcruft | tail -n 9 Adding file Websites/UNION/cgi/sitesearch-savedterms.txt => cgi/sitesearch-savedterms.txt Adding file Websites/UNION/cgi/sitesearch.py => cgi/sitesearch.py Adding file Websites/UNION/cgi/temp.html => cgi/temp.html Adding file Websites/UNION/cgi/test.py => cgi/test.py Create finished: files=32, folders=4, links=4, unknowns=0, crufts=3. ~/Desktop$ py3 $Z/zip-list.py testzip | tail -n 4 cgi/sitesearch-savedterms.txt 2019-06-30 13:37:30 13948 cgi/sitesearch.py 2019-06-29 08:48:38 14054 cgi/temp.html 2020-02-23 14:55:58 15372 cgi/test.py 2018-04-14 15:51:26 78 ~/Desktop$ py3 $Z/zip-create.py testzip Websites/UNION/cgi/*.py -zip@. | tail -n 9 Adding file Websites/UNION/cgi/pylotto.py => pylotto.py Adding file Websites/UNION/cgi/showcode.py => showcode.py Adding file Websites/UNION/cgi/sitesearch.py => sitesearch.py Adding file Websites/UNION/cgi/test.py => test.py Create finished: files=5, folders=0, links=0, unknowns=0, crufts=0. ~/Desktop$ py3 $Z/zip-list.py testzip | tail -n 4 pylotto.py 2017-06-13 14:58:38 151 showcode.py 2019-08-19 16:18:42 26250 sitesearch.py 2019-06-29 08:48:38 14054 test.py 2018-04-14 15:51:26 78 #---------------------------------------------------------------------------------------- # Program-library mode: same as last zip #---------------------------------------------------------------------------------------- ~/Desktop$ export PYTHONPATH=$Z:$PYTHONPATH ~/Desktop$ py3 >>> import ziptools, glob >>> ziptools.createzipfile('testzip', glob.glob('Websites/UNION/cgi/*.py'), zipat='.') Zipping ['Websites/UNION/cgi/pylotto-full.py', 'Websites/UNION/cgi/pylotto.py', 'Websites/UNION/cgi/showcode.py', 'Websites/UNION/cgi/sitesearch.py', 'Websites/UNION/cgi/test.py'] to testzip Adding file Websites/UNION/cgi/pylotto-full.py => pylotto-full.py Adding file Websites/UNION/cgi/pylotto.py => pylotto.py Adding file Websites/UNION/cgi/showcode.py => showcode.py Adding file Websites/UNION/cgi/sitesearch.py => sitesearch.py Adding file Websites/UNION/cgi/test.py => test.py files=5, folders=0, links=0, unknowns=0, crufts=0 # Silence output >>> ziptools.createzipfile('testzip', glob.glob('Websites/UNION/cgi/*.py'), zipat='.', trace=lambda *a: None) files=5, folders=0, links=0, unknowns=0, crufts=0 # Don't print stats return value >>> stats = ziptools.createzipfile('testzip', glob.glob('Websites/UNION/cgi/*.py'), zipat='.', trace=lambda *a: None) >>> ^D #---------------------------------------------------------------------------------------- # Interactive mode: same zip, new 1.2 prompt, wildcards work here too #---------------------------------------------------------------------------------------- ~/Desktop$ py3 $Z/zip-create.py Zip file to create? testzip Items to zip (comma separated)? cgi/*.py Skip cruft items (y=yes)? y Follow links to targets (y=yes)? Alternate zip path (.=unnested, enter=none) ? . About to ZIP ['cgi/*.py'], to testzip.zip, skipping cruft, not following links, zip@ path '.' Confirm with 'y'? y Zipping ['cgi/pylotto-full.py', 'cgi/pylotto.py', 'cgi/showcode.py', 'cgi/sitesearch.py', 'cgi/test.py'] to testzip.zip Cruft patterns: {'keep': ['.htaccess'], 'skip': ['.*', '[dD]esktop.ini', 'Thumbs.db', '~*', '$*', '*.py[co]']} Adding file cgi/pylotto-full.py => pylotto-full.py Adding file cgi/pylotto.py => pylotto.py Adding file cgi/showcode.py => showcode.py Adding file cgi/sitesearch.py => sitesearch.py Adding file cgi/test.py => test.py Create finished: files=5, folders=0, links=0, unknowns=0, crufts=0. #---------------------------------------------------------------------------------------- # Finale: zip unnested *.py files with and without a cd, unzip in folder and . #---------------------------------------------------------------------------------------- # Use cd to shorten paths ~/Desktop$ cd cgi ~/Desktop/cgi$ py3 $Z/zip-create.py ../testzip *.py Zipping ['pylotto-full.py', 'pylotto.py', 'showcode.py', 'sitesearch.py', 'test.py'] to ../testzip.zip Adding file pylotto-full.py Adding file pylotto.py Adding file showcode.py Adding file sitesearch.py Adding file test.py Create finished: files=5, folders=0, links=0, unknowns=0, crufts=0. # Use -zip@ to shorten paths ~/Desktop/cgi$ cd .. ~/Desktop$ py3 $Z/zip-create.py testzip cgi/*.py -zip@. Zipping ['cgi/pylotto-full.py', 'cgi/pylotto.py', 'cgi/showcode.py', 'cgi/sitesearch.py', 'cgi/test.py'] to testzip.zip Adding file cgi/pylotto-full.py => pylotto-full.py Adding file cgi/pylotto.py => pylotto.py Adding file cgi/showcode.py => showcode.py Adding file cgi/sitesearch.py => sitesearch.py Adding file cgi/test.py => test.py Create finished: files=5, folders=0, links=0, unknowns=0, crufts=0. # Extract to folder ~/Desktop$ py3 $Z/zip-extract.py testzip cgi2 Unzipping from testzip.zip to cgi2 Extracted pylotto-full.py => cgi2/pylotto-full.py Extracted pylotto.py => cgi2/pylotto.py Extracted showcode.py => cgi2/showcode.py Extracted sitesearch.py => cgi2/sitesearch.py Extracted test.py => cgi2/test.py Extract finished: files=5, folders=0, links=0, unknowns=0. ~/Desktop$ diff cgi2/test.py cgi/test.py # Extract to . ~/Desktop$ mkdir cgi3 ~/Desktop$ cd cgi3 ~/Desktop/cgi3$ py3 $Z/zip-extract.py ../testzip . -permissions Unzipping from ../testzip.zip to . Extracted pylotto-full.py => pylotto-full.py Extracted pylotto.py => pylotto.py Extracted showcode.py => showcode.py Extracted sitesearch.py => sitesearch.py Extracted test.py => test.py Extract finished: files=5, folders=0, links=0, unknowns=0. # The unzipped results (1.2 UTC modtimes were also used here) ~/Desktop/cgi3$ ls -l total 152 -rwxr-xr-x 1 blue staff 20729 Feb 18 2014 pylotto-full.py -rwxr-xr-x 1 blue staff 151 Jun 13 2017 pylotto.py -rw------- 1 blue staff 26250 Aug 19 2019 showcode.py -rwxr-xr-x 1 blue staff 14054 Jun 29 2019 sitesearch.py -rwxr-xr-x 1 blue staff 78 Apr 14 2018 test.py # The original data ~/Desktop/cgi3$ ls -l ../cgi/*.py -rwxr-xr-x 1 blue staff 20729 Feb 18 2014 ../cgi/pylotto-full.py -rwxr-xr-x 1 blue staff 151 Jun 13 2017 ../cgi/pylotto.py -rw------- 1 blue staff 26250 Aug 19 2019 ../cgi/showcode.py -rwxr-xr-x 1 blue staff 14054 Jun 29 2019 ../cgi/sitesearch.py -rwxr-xr-x 1 blue staff 78 Apr 14 2018 ../cgi/test.py