.tar.gz
.
d:\dropbox\my dropbox\backup\backup.tar.gz
, it appears there. But if you open this gz archive, the tar archive will be deep inside the dropbox\my dropbox\backup\backup.tar
. Those. the full path to the data is: d:\dropbox\my dropbox\backup\backup.tar.gz\dropbox\my dropbox\backup\backup.tar\...
In principle, you can live with this, but ugly ...
Copy Source | Copy HTML
- import sys
- import os
- import os .path
- import tarfile
- import time
- import gzip
- if __name__ == "__main__" :
- if ( len ( sys .argv) < 2 ):
- print ( "Usage: backup.py <output archive filename>" )
- print ( "Eg: \" backup.py d: \\ dropbox \\ my dropbox \\ backup \ "" )
- exit ( 1 )
- RootFoldersFile = "tobackup.lst"
- IgnoreFoldersFile = "ignore.lst"
- ExtraFile = "extra.lst"
- OutputArchive = sys .argv [ 1 ]
- OutputArchiveTar = OutputArchive + ".tar"
- OutputArchiveTarGz = OutputArchive + ".tar.gz"
- # Only mandatory file is RootFoldersFile, check that it exists
- if ( not os .path.isfile (RootFoldersFile)):
- print ( "% s doesn't exist" % RootFoldersFile)
- exit ( 1 )
- # Read root folders from file
- rootFolders = [i.strip () for i in open (RootFoldersFile, "r" ). readlines ()]
- # Read list of folders that need to be igonred (if specified)
- ignoreList = []
- if ( os .path.isfile (IgnoreFoldersFile)):
- ignoreList = [i.strip (). lower () for i in open (IgnoreFoldersFile, "r" ). readlines ()]
- # Delete old archive if exists
- if ( os .path.isfile (OutputArchiveTar)):
- os .unlink (OutputArchiveTar)
- if ( os .path.isfile (OutputArchiveTarGz)):
- os .unlink (OutputArchiveTarGz)
- filesCount = 0
- # Open output archive for writing (gzip it later)
- try :
- tar = tarfile . open (OutputArchiveTar, "w" )
- except IOError as err:
- print (err)
- exit ( 1 )
- lastTime = time . time ()
- for rootFolder in rootFolders:
- for root, dirs, files in os .walk (rootFolder):
- for file in files:
- tar.add ( os .path.join (root, file))
- filesCount + = 1
- # Show number of processed files each second
- if ( time . time () - lastTime> = 1 ):
- print ( "% d files ..." % (filesCount))
- lastTime = time . time ()
- # Skip ignored folders
- for dir in dirs:
- if ( dir .lower () in ignoreList or ( os .path.join (root, dir) .lower () in ignoreList)):
- dirs.remove (dir)
- # Add some files from extra files list
- if ( os .path.isfile (ExtraFile)):
- for file in [i.strip () for i in open (ExtraFile, "r" ) .readlines ()]:
- tar.add (file)
- tar.close ()
- print ( "Compressing ..." )
- # Gzip output archive
- try :
- gz = gzip open (OutputArchiveTarGz, "wb" )
- except IOError as err:
- print (err)
- exit ( 1 )
- gz.write ( open (OutputArchiveTar, "rb" ) .read ())
- gz.close ()
- os .unlink (OutputArchiveTar)
- print ( "Output:% s,% d file (s),% d bytes" % (OutputArchiveTarGz, filesCount, os .path.getsize (OutputArchiveTarGz)))
- print ( "Done" )
Source: https://habr.com/ru/post/69856/