删除两个文件夹之间的差异
有没有人能推荐一种方法(最好是用ruby、python或者dos)来删除两个文件夹之间不同的文件和子文件夹呢?
我需要这个方法能够遍历子目录,删除所有不同的内容。
我不想安装任何东西,所以一个脚本就最好了。
提前谢谢大家!
5 个回答
0
Ruby
folder1=ARGV[0]
folder2=ARGV[1]
f1=Dir["#{folder1}/**"].inject([]){|r,f|r<<File.basename(f)}
Dir["#{folder2}/**"].each{|f2|File.unlink(f2) if not f1.include?(File.basename(f2))}
1
难道用rsync不是更好的选择吗?它支持你想要的所有功能,而且速度很快。
0
这是我在想要比较两个文件夹时做的事情:
#!/usr/bin/env python
import os, os.path
import stat
def traverse_path(start_dir='.'):
for root, dirs, files in os.walk(start_dir, topdown=False):
for f in files:
complete_path = os.path.join(root, f)
try:
m = os.stat(complete_path)[stat.ST_MODE]
if stat.S_ISREG(m):
yield complete_path[len(start_dir):]
except OSError, err:
print 'Skipping', complete_path
except IOError, err:
print 'Skipping', complete_path
if __name__ == '__main__':
s = set(traverse_path('/home/hughdbrown'))
t = set(traverse_path('/home.backup/hughdbrown'))
for e in s - t:
print e
print '-' * 25
for e in t - s:
print e
注意这里有一个检查,确保只处理普通文件。我记得我遇到过一些文件,它们被用作信号量,或者一个程序写入,另一个程序读取之类的。这点后来变得很重要。
你可以添加代码来删除文件,按照你喜欢的任何规则来操作。