<p>这是一个正确的方法。您只需添加进度条和参数解析等部分。
您还需要添加一些try-except块来控制操作错误时发生的情况,比如权限被拒绝和类似的事情。你知道吗</p>
<pre><code>
import sys
import os
def shredfile (source, filebytes=16*"\0"):
f = open(source, "rb")
f.seek(0, 2)
size = f.tell()
f.close()
if len(filebytes)>size:
chunk = filebytes[:size]
else:
chunk = filebytes
f = open(source, "wb")
l = len(chunk)
n = 0
while n+l<size:
f.write(chunk)
n += l
# Ensure that file is overwritten to the end if size/len(filebytes)*len(filebytes) is not equal to size
chunk = filebytes[:size-f.tell()]
if chunk: f.write(chunk)
f.close()
def shreddir (source, filebytes=16*"\0", recurse=0):
for x in os.listdir(source):
path = os.path.join(source, x)
if os.path.isfile(path):
shredfile(path, filebytes)
continue
if recurse:
shreddir(path, filebytes, 1)
def shred (source, filebytes=16*"\0", recurse=0):
if os.path.isdir(source):
shreddir(source, filebytes, recurse)
return
shredfile(source, filebytes)
if len(sys.argv)>1:
print "Are you sure you want to shred '%s'?" % sys.argv[-1],
c = raw_input("(Yes/No?) ").lower()
if c=="yes":
shred(sys.argv[-1])
# Here you can iterate shred as many times as you want.
# Also you may choose to recurse into subdirectories which would be what you want if you need whole directory shredded
</code></pre>