#!/usr/bin/python
"""Cross-platform os tools: files/directories manipulations
Usage:
ostools.py help
prints this help
ostools.py copytodir FILES... DIR
copy files to specified directory
ostools.py copytree FILES... DIR
copy files to specified directory keeping relative paths
ostools.py remove [FILES...] [DIRS...]
remove files or directories (recursive)
"""
import glob
import os
import shutil
import sys
def makedir(dirname):
if not os.path.exists(dirname):
os.makedirs(dirname)
if not os.path.isdir(dirname):
print "Error: Destination is not a directory", dirname
return 2
return 0
def main(argv=None):
if argv is None:
argv = sys.argv[1:]
if not argv:
argv = ['help']
cmd = argv.pop(0)
if cmd == 'help':
print __doc__
return 0
if cmd == 'copytodir':
if len(argv) < 2:
print "Usage: ostools.py copytodir FILES... DIR"
return 1
todir = argv.pop()
retcode = makedir(todir)
if retcode:
return retcode
files = []
for possible_glob in argv:
files += glob.glob(possible_glob)
for src in files:
dest = os.path.join(todir, os.path.basename(src))
shutil.copy(src, dest)
print "Copied:", src, "=>", dest
return 0
if cmd == 'copytree':
if len(argv) < 2:
print "Usage: ostools.py copytree FILES... DIR"
return 1
todir = argv.pop()
retcode = makedir(todir)
if retcode:
return retcode
files = []
for possible_glob in argv:
files += glob.glob(possible_glob)
for src in files:
relative_path = src
dest = os.path.join(todir, relative_path)
dest_dir = os.path.dirname(dest)
retcode = makedir(dest_dir)
if retcode:
return retcode
shutil.copy(src, dest)
print "Copied:", src, "=>", dest
return 0
if cmd == 'remove':
if len(argv) == 0:
print "Usage: ostools.py remove [FILES...] [DIRS...]"
return 1
filesdirs = []
for possible_glob in argv:
filesdirs += glob.glob(possible_glob)
for i in filesdirs:
if os.path.isdir(i):
shutil.rmtree(i)
print "Removed:", i
elif os.path.isfile(i):
os.remove(i)
print "Removed:", i
else:
print "Not found:", i
return 0
if cmd == "basename":
if len(argv) == 0:
print "Usage: ostools.py basename [PATH | URL]"
return 1
for path in argv:
print os.path.basename(path)
return 0
if cmd == 'makedir':
if len(argv) == 0:
print "Usage: ostools.py makedir DIR"
return 1
retcode = makedir(argv.pop())
if retcode:
return retcode
return 0
print "Usage error"
print __doc__
return 1
if __name__ == "__main__":
sys.exit(main())
|