比较同一文件夹下相同大小的文件。发现相同大小文件,则移动到temp_folder文件夹下。 也可以添加比较设备号,创建时间等。
find_del_same_files.py
__author__ = 'wulong'
import sys
import os
import shutil
def get_file_list(path):
f_l = []
if os.path.isdir(path):
for tmp in os.listdir(path):
tmp = path + os.sep + tmp
if os.path.isdir(tmp):
ret_list = get_file_list(tmp)
f_l.extend(ret_list)
else:
f_l.append(tmp)
else:
f_l.append(path)
return f_l
def del_same_file(file_list,bakup_dir):
remain_list = []
count = 1
bakup_dir.strip()
tmp_dir_count = 1
tmp_dir = bakup_dir
if (os.path.exists(tmp_dir)):
while True:
if (os.path.exists(tmp_dir)):
tmp_dir = bakup_dir + str(tmp_dir_count)
tmp_dir_count = tmp_dir_count + 1
else:
shutil.move(bakup_dir, tmp_dir)
break
os.makedirs(bakup_dir)
while len(file_list) > 0:
same_flag = False
f_old = file_list.pop(0)
if os.path.isfile(f_old):
old_stat = os.stat(f_old)
# print "old 0", f_old, ", ",old_stat.st_ino
# print "old 1", f_old, ", ",old_stat.st_dev
for f_remain in remain_list:
remain_stat = os.stat(f_remain)
if (old_stat.st_size == remain_stat.st_size) and (old_stat.st_dev == remain_stat.st_dev):
f_n = os.path.basename(f_old)
tmp = bakup_dir + os.sep + str(count) + "_" + f_n
while True:
tmp = bakup_dir + os.sep + str(count) + "_" + f_n
if os.path.isfile(tmp):
count = count + 1
else:
break
print "old ", old_stat.st_size, ", ",f_old
print "remain ",remain_stat.st_size, ", ",f_remain
shutil.move(f_old, tmp)
same_flag = True
count = count + 1
break
if (not same_flag):
remain_list.append(f_old)
old_path=""
if len(sys.argv) == 2:
old_path = sys.argv[1]
old_path.strip()
if os.path.isdir(old_path):
os.chdir(old_path)
old_path = os.getcwd()
old_file_list = get_file_list(old_path)
del_same_file(old_file_list, old_path + os.sep + "temp_folder")
else:
print "param is not directory ",old_path