任何人都可以請建議一種方法(ruby,python或dos優先)只刪除兩個給定文件夾之間的不同文件和子文件夾?刪除兩個文件夾之間的差異
我需要它通過子目錄遞歸併刪除所有不同的東西。
我不想安裝任何東西,所以腳本會很棒。
在此先感謝
任何人都可以請建議一種方法(ruby,python或dos優先)只刪除兩個給定文件夾之間的不同文件和子文件夾?刪除兩個文件夾之間的差異
我需要它通過子目錄遞歸併刪除所有不同的東西。
我不想安裝任何東西,所以腳本會很棒。
在此先感謝
這是當我想diff的目錄,我也做了這樣的事情:
#!/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
發現,有定期的文件進行檢查。我似乎記得我遇到過用作信號量的文件,或者是被一個進程寫入並被另一個進程讀取的文件。事實證明這很重要。
根據您喜歡的任何規則,您可以添加代碼以刪除文件。
這樣做。謝謝 – 2010-10-26 10:13:18
您可以使用Python的difflib告訴哪些文件不同,則os.unlink
他們。真的,如果你需要的是說,如果文件存在差別可言,你可以比較它們與文字:
for file1, file2 in files:
f1 = open(file1, 'r').read()
f1.close()
f2 = open(file2, 'r').read()
f2.close()
if f1 != f2:
os.unlink(file1)
os.unlink(file2)
您可以使用os.walk
獲取文件夾列表。上面的代碼是沒有像with
這樣的新東西寫的,因爲你不想安裝東西。如果你有一個新的Python安裝,你可以使它更好一點。
紅寶石
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))}
rsync是不是更好的解決方案?它支持你想要的一切並快速完成。
顯示示例... – ghostdog74 2010-10-22 13:59:25