Tôi đã viết một Script Python để tìm các tập tin trùng lặp và ngừng lãng phí dung lượng lưu trữ

0 0 0

Người đăng: Thái Thịnh

Theo Viblo Asia

Hãy để tôi vẽ cho bạn một bức tranh:

Bạn đang dọn dẹp nội dung kỹ thuật số của mình và nhận ra mình có ba bản giống hệt nhau của cùng một tập tin:

  • invoice_final.pdf
  • invoice_final_v2.pdf
  • invoice_final_2_REAL_FINAL.pdf

Hoặc tệ hơn… bạn đã tải cùng một tấm meme 17 lần trong vòng 2 năm. Bạn không muốn trở thành một người tích trữ kỹ thuật số, nhưng thư mục của bạn lại nói lên điều ngược lại.

Vì vậy, tôi đã làm điều này: Tôi viết một đoạn script Python đơn giản nhưng mạnh mẽ để tìm và loại bỏ các tập tin trùng lặp — kể cả khi chúng có tên khác nhau.

Và vâng, từ đó tôi ngủ ngon hơn mỗi đêm.

Vấn đề: Bạn không biết mình đang sở hữu gì nữa

Bạn đã sao lưu dữ liệu. Bạn từng sắp xếp chúng (một lần nào đó). Nhưng sau đó: đồng bộ cloud, tải file từ Slack, các bản sao đổi tên, và các bản sao lưu trong cơn hoảng loạn bắt đầu chồng chất.

Đột nhiên:

  • Dung lượng lưu trữ đầy
  • Bạn không tìm thấy thứ mình cần
  • Bạn sợ xoá nhầm vì “biết đâu đó là bản quan trọng”

Giải pháp: Kiểm tra nội dung, không phải tên File

Hãy quên tên file đi.

Bí quyết nằm ở việc kiểm tra hash của tập tin — vân tay kỹ thuật số của nó.

Nếu hai tập tin có cùng hash, chúng hoàn toàn giống nhau.

Dù một tập tin tên là resume.pdf và tập tin kia là copy-of-resume-2022-old.pdf.

Hãy cùng thực hiện nào.

Từng bước: Viết script python để tìm File trùng lặp

Bước 1: Tính hash cho một file

import hashlib def file_hash(filepath, chunk_size=8192): hasher = hashlib.md5() with open(filepath, 'rb') as f: while chunk := f.read(chunk_size): hasher.update(chunk) return hasher.hexdigest()

Hàm này đọc file theo từng khối nhỏ và tạo ra giá trị hash. Dùng MD5 là đủ — không phải mã hoá tài liệu mật quốc gia đâu.

Bước 2: Quét một thư mục để tìm file trùng lặp

import os def find_duplicates(folder): hashes = {} duplicates = [] for root, _, files in os.walk(folder): for file in files: path = os.path.join(root, file) try: filehash = file_hash(path) if filehash in hashes: duplicates.append((path, hashes[filehash])) else: hashes[filehash] = path except Exception as e: print(f"Skipped {path}: {e}") return duplicates

Bước 3: Chạy script và hiển thị kết quả

if __name__ == "__main__": folder_to_scan = os.path.expanduser("~/Documents") dupes = find_duplicates(folder_to_scan) if dupes: print("Found duplicates:") for dup, original in dupes: print(f"{dup} == {original}") else: print("No duplicates found!")

Những gì bạn nhận được

Script này:

  • Chạy được với bất kỳ thư mục nào
  • Tìm các tập tin thật sự giống nhau
  • Bỏ qua tên file, chỉ quan tâm đến nội dung
  • Hiển thị các file đang chiếm dụng không gian lưu trữ hai lần

Bạn còn có thể nâng cấp nó để:

  • Tự động xoá file trùng lặp
  • Ghi log vào tập tin
  • Chuyển các bản trùng lặp vào thư mục ~/Duplicates

Lời kết: Sắp xếp File gọn gàng = Đầu óc minh mẫn

Bạn không cần một app hạng nặng.

Bạn chỉ cần những script nhỏ sửa những điều phiền toái. Giúp bạn lấy lại thời gian và sự tỉnh táo.

Bắt đầu từ việc nhỏ. Giữ cho mọi thứ kỳ lạ.

Python không chỉ để lấy dự báo thời tiết — nó có thể dọn dẹp cuộc sống kỹ thuật số của bạn, từng hash một.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

1 1 143

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

1 1 244

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

1 1 127

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

1 1 145

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 152

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 174