Calculate the size of a folder in bytes and count the number of files.

Python script for Windows

import os

def calculate_folder_details(folder_path):
    """Calculate the size of a folder in bytes and count the number of files."""
    total_size = 0
    file_count = 0
    for dirpath, dirnames, filenames in os.walk(folder_path):
        file_count += len(filenames)
        for file in filenames:
            filepath = os.path.join(dirpath, file)
            if os.path.exists(filepath):
                total_size += os.path.getsize(filepath)
    return total_size, file_count

def format_size(size_in_bytes):
    """Convert size from bytes to GB and MB."""
    size_in_gb = size_in_bytes / (1024 ** 3)  # Convert bytes to GB
    size_in_mb = size_in_bytes / (1024 ** 2)  # Convert bytes to MB
    return size_in_gb, size_in_mb

def main():
    base_path = 'D:\\_FTP_install_home\\'  # Replace 'YourUsername' with the actual username
    output_file = 'D:\\espacio-GB-2025-01-23.txt'  # Replace 'YourUsername' with the actual username

    # Ensure base path exists
    if not os.path.exists(base_path):
        print(f"Error: The path {base_path} does not exist.")
        return

    folder_details = []
    total_size_bytes = 0
    total_files = 0

    for item in os.listdir(base_path):
        item_path = os.path.join(base_path, item)
        if os.path.isdir(item_path):
            folder_size_bytes, file_count = calculate_folder_details(item_path)
            size_in_gb, size_in_mb = format_size(folder_size_bytes)
            total_size_bytes += folder_size_bytes
            total_files += file_count
            folder_details.append((item, size_in_gb, size_in_mb, file_count))

    # Sort by size in GB (descending)
    folder_details.sort(key=lambda x: x[1], reverse=True)

    with open(output_file, 'w') as f:
        # Column headers with left alignment
        f.write(f'{"Folder":<30}{"Size (GB)":<15}{"Size (MB)":<15}{"File Count":<10}\n')
        for item, size_in_gb, size_in_mb, file_count in folder_details:
            f.write(f'{item:<30}{size_in_gb:<15.2f}{size_in_mb:<15.2f}{file_count:<10}\n')


    print(f"Folder details written to {output_file}")

if __name__ == "__main__":
    main()

Python script for Linux

import os

def calculate_folder_details(folder_path):
    """Calculate the size of a folder in bytes and count the number of files."""
    total_size = 0
    file_count = 0
    for dirpath, dirnames, filenames in os.walk(folder_path):
        file_count += len(filenames)
        for file in filenames:
            filepath = os.path.join(dirpath, file)
            if os.path.exists(filepath):
                total_size += os.path.getsize(filepath)
    return total_size, file_count

def format_size(size_in_bytes):
    """Convert size from bytes to GB and MB."""
    size_in_gb = size_in_bytes / (1024 ** 3)  # Convert bytes to GB
    size_in_mb = size_in_bytes / (1024 ** 2)  # Convert bytes to MB
    return size_in_gb, size_in_mb

def main():
    base_path = '/LUSTRE/home/jant.encinar.umh.es/'  # Linux path, replace with the correct one
    output_file = '/LUSTRE/home/jant.encinar.umh.es/espacio-home-2025-01-23.txt'  # Output file path in Linux

    # Ensure the base path exists
    if not os.path.exists(base_path):
        print(f"Error: The path {base_path} does not exist.")
        return

    folder_details = []
    total_size_bytes = 0
    total_files = 0

    # Iterate over the items in the base path
    for item in os.listdir(base_path):
        item_path = os.path.join(base_path, item)
        if os.path.isdir(item_path):  # Only directories
            folder_size_bytes, file_count = calculate_folder_details(item_path)
            size_in_gb, size_in_mb = format_size(folder_size_bytes)
            total_size_bytes += folder_size_bytes
            total_files += file_count
            folder_details.append((item, size_in_gb, size_in_mb, file_count))

    # Sort by size in GB (descending)
    folder_details.sort(key=lambda x: x[1], reverse=True)

    # Save folder details to the output file
    with open(output_file, 'w') as f:
        f.write(f'{"Folder":<30}{"Size (GB)":<15}{"Size (MB)":<15}{"File Count":<10}\n')
        for item, size_in_gb, size_in_mb, file_count in folder_details:
            f.write(f'{item:<30}{size_in_gb:<15.2f}{size_in_mb:<15.2f}{file_count:<10}\n')

    print(f"Folder details written to {output_file}")

if __name__ == "__main__":
    main()







Última modificación: