diff --git a/tidy_img/sort.exe b/tidy_img/sort.exe new file mode 100644 index 0000000..9957e44 Binary files /dev/null and b/tidy_img/sort.exe differ diff --git a/tidy_img/sort.py b/tidy_img/sort.py new file mode 100644 index 0000000..53dbf37 --- /dev/null +++ b/tidy_img/sort.py @@ -0,0 +1,49 @@ +import re +import shutil +from pathlib import Path +from hashlib import sha256 + +d= Path(".").absolute() + +samefiles:list[Path]=[] +cnt={} +i=0 + +for file in d.glob("**/*"): + if not file.is_file():continue + i+=1 + result = re.search("(IMG|VID)_(\d{4})(\d{2})(\d{2})_(\d{6})(_.+)?\.(jpg|mp4)",file.name) + if not result:continue + if re.search(r"[\\\/]?20\d{2}[\\\/]",str(file.relative_to(d))) is not None:continue + if result.group(2) in cnt.keys(): + cnt[result.group(2)]+=1 + else: + cnt[result.group(2)]=1 + if i&7==0: + for key,val in cnt.items(): + print(f"{key}: {val}") + print() + target_dir=d/result.group(2) + target_dir.mkdir(exist_ok=True) + target =target_dir/file.name + if target.exists(): + with open(file,"rb") as f: + fileHash=sha256(f.read()) + if target.stat().st_size == file.stat().st_size: + with open(target,"rb") as f: + targetHash=sha256(f.read()) + if fileHash.hexdigest()==targetHash.hexdigest(): + samefiles.append(file) + continue + target_dir=d/"conflict"/result.group(2) + target_dir.mkdir(parents=True,exist_ok=True) + target =target_dir/(file.with_stem(file.name+"_"+fileHash.hexdigest()[:5]).name) + shutil.move(file,target) + +if len(samefiles)!=0: + print("Detected same files: \n","\n".join([str(file) for file in samefiles])) + ipt=input("Delete Y/n: ") + if ipt == "n": + exit() + for file in samefiles: + file.unlink() \ No newline at end of file