Script Python para encontrar maiores arquivos com dada extensão recursivamente

Este script Python simples listará todos os arquivos ordenados por tamanho de arquivo no diretório dado recursivamente. Você deve fornecer um argumento -e/--extension para considerar apenas extensões de nome de arquivo específicas. Extensões de nome de arquivo são comparadas de maneira case-insensitive.

list_largest_files.py
#!/usr/bin/env python3
import os
import argparse

def convert_size(size_bytes):
    """ Convert byte size to a human-readable format. """
    for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB']:
        if size_bytes < 1024:
            return f"{size_bytes:.2f}{unit}"
        size_bytes /= 1024
    return f"{size_bytes:.2f}YB"

def get_files_with_extensions(root_dir, extensions):
    """ Recursively find files with the given extensions in the directory. """
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            if any(file.lower().endswith(ext.lower()) for ext in extensions):
                full_path = os.path.join(root, file)
                size = os.path.getsize(full_path)
                yield full_path, size

def main():
    parser = argparse.ArgumentParser(description="List files with specific extensions sorted by size.")
    parser.add_argument("directory", type=str, help="Directory to search")
    parser.add_argument("-e", "--extension", type=str, action='append', help="File extension to filter by", required=True)
    args = parser.parse_args()

    files = list(get_files_with_extensions(args.directory, args.extension))
    files.sort(key=lambda x: x[1])

    for file, size in files:
        print(f"{convert_size(size)} - {file}")

if __name__ == "__main__":
    main()

Exemplo de uso: Encontrar maiores arquivos Python:

list_largest_py.sh
python ListLargestFiles.py -e py  .

Exemplo de uso: Encontrar (alguns tipos de) filmes:

list_largest_movies.sh
python ListLargestFiles.py -e mov -e avi -e mkv -e mp4 ~/Nextcloud

Saída de exemplo:

list_largest_example_output.txt
[...]
108.81MB - /home/uli/Nextcloud/Google Fotos/20220925_151542.mp4
117.92MB - /home/uli/Nextcloud/Google Fotos/20220925_151958.mp4
237.51MB - /home/uli/Nextcloud/Google Fotos/20220911_115209.mp4
265.02MB - /home/uli/Nextcloud/Google Fotos/20220905_151716.mp4
317.36MB - /home/uli/Nextcloud/Google Fotos/20220912_124906.mp4
431.06MB - /home/uli/Nextcloud/Google Fotos/20220921_153051.mp4

Check out similar posts by category: Python