Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. """
  4. Implementation of Linux 'cp' command
  5. with r and f modes.
  6. """
  7.  
  8. __author__ = 'Irshad Ahmad Bhat'
  9. __email__ = 'bhatirshad127@gmail.com'
  10.  
  11.  
  12. import os
  13. import sys
  14. import stat
  15.  
  16. def copyfile(file_path, targer_dir):
  17. os.chdir(file_path[:file_path.rindex('/')])
  18. file_name = file_path[file_path.rindex('/')+1:]
  19. if not os.access(file_name, os.R_OK):
  20. if sys.argv[1] !='-f':
  21. print "permission denied"
  22. sys.exit()
  23. else:
  24. acc_mode = os.stat(file_name)
  25. os.chmod(file_name, acc_mode.st_mode | stat.S_IREAD)
  26. file_pointer = open(file_name, 'rb')
  27. temp_file = file_pointer.read()
  28. file_pointer.close()
  29. os.chdir(target_dir)
  30. file_pointer =open(file_name, 'wb')
  31. file_pointer.write(temp_file)
  32. file_pointer.close()
  33. print "Done..."
  34.  
  35. def recursive_copy(source_dir, target_dir):
  36. if not (os.access(source_dir, os.X_OK) and os.access(source_dir, os.R_OK)):
  37. if 'f' not in sys.argv[1]:
  38. print "permission denied"
  39. sys.exit()
  40. else:
  41. acc_mode = os.stat(source_dir)
  42. os.chmod(source_dir, acc_mode.st_mode | stat.S_IXUSR)
  43. os.chmod(source_dir, acc_mode.st_mode | stat.S_IREAD)
  44. os.chdir(target_dir)
  45. os.makedirs(source_dir[source_dir.rindex('/')+1:])
  46. target_dir2 = target_dir +'/'+ source_dir[source_dir.rindex('/')+1:]
  47. wlk = os.walk(source_dir)
  48. root, dirnames, filenames = next(wlk)
  49. for new_file in filenames:
  50. os.chdir(source_dir)
  51. if not os.access(new_file, os.R_OK):
  52. if 'f' not in sys.argv[1]:
  53. print "permission denied"
  54. sys.exit()
  55. else:
  56. acc_mode = os.stat(new_file)
  57. os.chmod(new_file, acc_mode.st_mode | stat.S_IREAD)
  58. file_pointer = open(root+'/'+new_file, 'rb')
  59. temp_file = file_pointer.read()
  60. file_pointer.close()
  61. os.chdir(target_dir2)
  62. file_pointer =open(new_file, 'wb')
  63. file_pointer.write(temp_file)
  64. file_pointer.close()
  65. for new_dir in dirnames:
  66. recursive_copy(root+'/'+new_dir,target_dir2)
  67.  
  68. if __name__ == "__main__":
  69.  
  70. if len(sys.argv)==4 and os.path.isdir(sys.argv[2]):
  71. if not (sys.argv[1] == '-r' or sys.argv[1] == '-rf' or sys.argv[1] == '-fr'):
  72. inv = list(set(sys.argv[1]) - set('-rf'))
  73. if inv: print "invalid option -- '{}'".format(inv[0])
  74. else: print "omitting directory '{}'".format(sys.argv[2])
  75. sys.exit()
  76. else:
  77. if not (os.path.isdir(sys.argv[3])):
  78. print "'{}': No such file or directory".format(sys.argv[3])
  79. sys.exit()
  80. source_dir = os.path.abspath(sys.argv[2])
  81. target_dir = os.path.abspath(sys.argv[3])
  82. top = target_dir +'/'+ source_dir[source_dir.rindex('/')+1:]
  83. if source_dir == top:
  84. print "'{}' and '{}' are the same file".format(sys.argv[2],top)
  85. sys.exit()
  86. if os.path.exists(top):
  87. for root, dirs, files in os.walk(top, topdown=False):
  88. for name in files:
  89. os.remove(os.path.join(root, name))
  90. for name in dirs:
  91. os.rmdir(os.path.join(root, name))
  92. os.rmdir(top)
  93. recursive_copy(source_dir,target_dir)
  94. print "Done..."
  95. elif len(sys.argv) == 3 or (len(sys.argv) == 4 and os.path.isfile(sys.argv[2])):
  96. if len(sys.argv) == 4:
  97. file_path = sys.argv[2]
  98. target_dir = sys.argv[3]
  99. else:
  100. file_path = sys.argv[1]
  101. target_dir = sys.argv[2]
  102. if not (os.path.exists(file_path) and os.path.exists(target_dir)):
  103. print "'{}': No such file or directory".format(file_path)
  104. if os.path.isdir(file_path):
  105. print "omitting directory '{}'".format(file_path)
  106. sys.exit()
  107. copyfile(os.path.abspath(file_path),os.path.abspath(target_dir))
  108. else:
  109. if len(sys.argv) != 4:
  110. print "Enter valid arguments"
  111. sys.exit()
  112. print "'{}': No such file or directory".format(sys.argv[2]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement