Skip to content

holden093/media-sorter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Media Sorter

Organizza automaticamente qualsiasi tipo di file in una struttura YYYY/Mese/ basata sulla data di scatto (EXIF), sulla data nel nome file, o come ultima risorsa sulla data di modifica del filesystem.

I file media (immagini, video, audio) vengono messi direttamente nella cartella del mese. Tutto il resto (documenti, archivi, PDF, ecc.) finisce in una sottocartella documents/.

Export/
├── 2023/
│   └── July/
│       └── vacanza_2023-07-20.mp4
├── 2024/
│   ├── January/
│   │   └── 20240115_evento.mp4
│   ├── March/
│   │   ├── IMG_2024-03-15_120000.jpg
│   │   └── documents/
│   │       └── 2024-03-31_report.pdf
│   ├── June/
│   │   ├── PXL_20240601_083000.jpg
│   │   └── documents/
│   │       └── 2024-06-15_backup.zip
│   └── December/
│       └── 2024-12-25_natale.png
├── 2025/
│   └── January/
│       └── 15012025_festa.heic
└── 2026/
    └── May/
        └── documents/
            ├── fattura_gennaio.docx       ← data da mtime
            └── plain_notes.txt            ← data da mtime

Installazione

git clone https://github.com/holden093/media-sorter.git
cd media-sorter
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Utilizzo

Base

source .venv/bin/activate   # sempre prima di eseguire
python main.py

Scansiona la directory corrente (./) e sposta tutti i file in ./Export/YYYY/Mese/.

Opzioni

Opzione Descrizione
--root DIR Directory radice da scandire (default: ./)
--export DIR Directory di destinazione (default: ./Export/)
--dry-run Mostra cosa verrebbe fatto senza modificare nulla
--copy Copia i file invece di spostarli
--no-skip-screenshots Includi anche gli screenshot (esclusi per default)
--pattern REGEX Pattern data aggiuntivo con 3 gruppi (anno, mese, giorno)
-v, --verbose Output dettagliato con data di origine per ogni file

Esempi

# Anteprima senza modificare
python main.py --dry-run

# Organizza tutto da una cartella specifica
python main.py --root ~/Download --export ~/Archivio

# Copia invece di spostare
python main.py --copy

# Output dettagliato
python main.py -v

# Pattern data personalizzato (es. foto_15_01_2024.jpg)
python main.py --pattern '(\d{2})_(\d{2})_(\d{4})'

# Includi anche gli screenshot
python main.py --no-skip-screenshots

Come funziona

  1. Scansiona ricorsivamente la directory --root raccogliendo tutti i file (nessun filtro per estensione)

  2. Rileva il tipo MIME reale via magic bytes (filetype) — non si basa sull'estensione

  3. Per ogni file, determina la data con questa priorità:

    Priorità Metodo Si applica a
    1 EXIF (Image DateTime, EXIF DateTimeOriginal) Solo immagini
    2 Nome file — pattern YYYY-MM-DD, YYYYMMDD, DD-MM-YYYY, DDMMYYYY + custom via --pattern Qualsiasi file
    3 mtime del filesystem Qualsiasi file
  4. Sposta (o copia) il file:

    • Media (image/video/audio) → Export/YYYY/Mese/file.ext
    • Tutto il restoExport/YYYY/Mese/documents/file.ext
  5. Imposta il timestamp del file alla data originale

File esclusi

  • File nascosti (che iniziano con .)
  • File già dentro la directory di export
  • File con s100 nel percorso
  • File con Screenshot nel nome (disattivabile con --no-skip-screenshots)

Dipendenze

  • Python 3.9+
  • exifread — lettura metadati EXIF
  • filetype — rilevamento MIME via magic bytes (pure Python, ~30 KB)

About

Organizza QUALSIASI file in YYYY/Mese/ usando EXIF, nome file o mtime. Rilevamento via magic bytes.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages