Classement
Modifié par john le 2026/09/20 20:22
Ce script organise automatiquement les fichiers d’un répertoire en les triant par type (extension) et par date de modification (année/mois). Idéal pour ranger un dossier de téléchargements ou trier des fichiers archivés.
Fonctionnement : le script détecte l'extension de chaque fichier, extrait sa date de modification, crée le dossier correspondant (par exemple pdf/2024/12) et y déplace le fichier.
Script Bash
#!/bin/bash
set -euo pipefail
DIR="${1:-$PWD}"
SCRIPT="$(cd "$(dirname "$0")" && pwd)/$(basename "$0")"
echo "Organisation des fichiers dans : $DIR"
find "$DIR" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
# Ne pas se déplacer soi-même
[ "$file" = "$SCRIPT" ] && continue
ext=$(basename "$file" | awk -F. '{if (NF>1) print $NF; else print "autres"}' | tr '[:upper:]' '[:lower:]')
date_path=$(date -r "$file" "+%Y/%m")
target="$DIR/$ext/$date_path"
mkdir -p "$target"
mv -n "$file" "$target/" # -n : ne jamais écraser un fichier existant
echo "→ $(basename "$file") → $ext/$date_path/"
done
set -euo pipefail
DIR="${1:-$PWD}"
SCRIPT="$(cd "$(dirname "$0")" && pwd)/$(basename "$0")"
echo "Organisation des fichiers dans : $DIR"
find "$DIR" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
# Ne pas se déplacer soi-même
[ "$file" = "$SCRIPT" ] && continue
ext=$(basename "$file" | awk -F. '{if (NF>1) print $NF; else print "autres"}' | tr '[:upper:]' '[:lower:]')
date_path=$(date -r "$file" "+%Y/%m")
target="$DIR/$ext/$date_path"
mkdir -p "$target"
mv -n "$file" "$target/" # -n : ne jamais écraser un fichier existant
echo "→ $(basename "$file") → $ext/$date_path/"
done
| Élément | Rôle |
|---|---|
| set -euo pipefail | Arrêt à la première erreur |
| -print0 et read -d '' | Gère les noms contenant espaces, apostrophes ou retours à la ligne |
| mv -n | N'écrase jamais un fichier déjà présent dans le dossier cible |
| Test sur $SCRIPT | Empêche le script de se ranger lui-même |
Exemple de résultat
Téléchargements/
├── pdf/2024/12/rapport-final.pdf
├── png/2025/05/capture.png
├── autres/2025/01/fichier_sans_extension
├── pdf/2024/12/rapport-final.pdf
├── png/2025/05/capture.png
├── autres/2025/01/fichier_sans_extension
Exécution
./organise.sh
# ou
./organise.sh /chemin/vers/dossier
# ou
./organise.sh /chemin/vers/dossier
Personnalisation
- Ignorer les petits fichiers : find "$DIR" -maxdepth 1 -type f -size +10k
- Ignorer les fichiers récents : ajouter -mtime +7
- Trier par année seulement : date -r "$file" "+%Y"
- Intégrer à Nautilus : voir Nautilus et Zenity