FSAudit Report

Root: {{ root_path }} — Generated: {{ generated_at }}

Summary

Total Files
{{ analysis.total_files | format_int }}
Total Size
{{ analysis.total_size_bytes | mb }} MB
Inactive Files
{{ analysis.inactive_files | length }}
Zero-Byte Files
{{ analysis.zero_byte_files | length }}
Name Duplicates (groups)
{{ analysis.duplicates_by_name | length }}
Hash Duplicates (groups)
{{ analysis.duplicates_by_hash | length }}
Empty Directories
{{ analysis.empty_directories | length }}
Permission Issues
{{ analysis.permission_issues | length }}

Filesystem Health

{{ "%.1f"|format(analysis.health_score) }}/100
Health Score
{% for key, penalty in analysis.health_breakdown.items() %}
{{ key }}
-{{ "%.2f"|format(penalty) }}
{% else %}

No breakdown available.

{% endfor %}

File Categories

{% if analysis.by_category %}
{% set max_cat_bytes = analysis.by_category.values() | map(attribute='bytes') | max %} {% for cat, data in analysis.by_category.items() | sort(attribute='1.bytes', reverse=True) %}
{{ cat }}
{{ data.bytes | mb }} MB
{% endfor %}
{% for cat, data in analysis.by_category.items() | sort(attribute='1.bytes', reverse=True) %} {% endfor %}
Category Files Size (MB) % of Total Avg Size (MB)
{{ cat }} {{ data.count }} {{ data.bytes | mb }} {{ "%.1f"|format(data.percent) }}% {{ data.avg_size | mb }}
{% else %}

No category data available.

{% endif %}

Top Largest Files

{% if analysis.top_largest %} {% for f in analysis.top_largest %} {% endfor %}
Path Size (MB) Category Modified
{{ f.path }} {{ f.size_bytes | mb }} {{ f.category }} {{ f.mtime.strftime('%Y-%m-%d') if f.mtime else '' }}
{% else %}

No files found.

{% endif %}

Inactive Files

{% set inactive_list = analysis.inactive_files %} {% if inactive_list | length > max_rows %}
Showing first {{ max_rows }} of {{ inactive_list | length }} inactive files.
{% endif %} {% if inactive_list %} {% for f in inactive_list[:max_rows] %} {% endfor %}
Path Size (MB) Category Last Modified Days Inactive
{{ f.path }} {{ f.size_bytes | mb }} {{ f.category }} {{ f.mtime.strftime('%Y-%m-%d') if f.mtime else '' }} {{ f.days_inactive }}
{% else %}

No inactive files found.

{% endif %}

Zero-Byte Files

{% if analysis.zero_byte_files %} {% for f in analysis.zero_byte_files %} {% endfor %}
Path Category Modified
{{ f.path }} {{ f.category }} {{ f.mtime.strftime('%Y-%m-%d') if f.mtime else '' }}
{% else %}

No zero-byte files found.

{% endif %}

Name Duplicates

{% if analysis.duplicates_by_name %} {% for name, paths in analysis.duplicates_by_name.items() %} {% endfor %}
Filename Count Paths
{{ name }} {{ paths | length }} {{ paths | join('
') }}
{% else %}

No name duplicates found.

{% endif %}

Hash Duplicates (Byte-level)

{% if analysis.duplicates_by_hash %} {% for digest, paths in analysis.duplicates_by_hash.items() %} {% endfor %}
SHA-256 Count Paths
{{ digest[:16] }}... {{ paths | length }} {{ paths | join('
') }}
{% else %}

No byte-level duplicates found (or hash check not enabled).

{% endif %}

Permission Issues

{% if analysis.permission_issues %} {% for f in analysis.permission_issues %} {% endfor %}
Path Permissions Issue
{{ f.path }} {{ f.permissions }} {{ f.issue }}
{% else %}

No permission issues found.

{% endif %}

Empty Directories

{% if analysis.empty_directories %} {% for d in analysis.empty_directories %} {% endfor %}
Path Depth
{{ d.path }} {{ d.depth }}
{% else %}

No empty directories found.

{% endif %}

File Activity Timeline (by modification month)

{% if analysis.timeline %} {% set max_tl = analysis.timeline.values() | max %}
{% for month, count in analysis.timeline.items() | sort %}
{{ month }}
{{ count }}
{% endfor %}
{% else %}

No timeline data available.

{% endif %}