删除两个文件夹之间的差异

0 投票
5 回答
515 浏览
提问于 2025-04-16 05:55

有没有人能推荐一种方法(最好是用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

注意这里有一个检查,确保只处理普通文件。我记得我遇到过一些文件,它们被用作信号量,或者一个程序写入,另一个程序读取之类的。这点后来变得很重要。

你可以添加代码来删除文件,按照你喜欢的任何规则来操作。

撰写回答