Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Créer des répertoires alphabétiques avec Bash

- 443 mots - Temps de lecture estimé: 2 minutes

Offre de formation

Potion Bottle IconHéberger ton entreprise ou ton OBNL avec YunohostPotion Bottle Icon

Arrête de payer par utilisateur·ice pour des outils qui analysent tes données. Expérimente l'autohébergement sur un vrai serveur avec Yunohost et ses centaines d'applications libres.

Héberge tes données au Québec

Je te partage aujourd’hui un script dans le langage bash qui va te permettre de classer un répertoire de fichiers dans des sous-répertoires alphabétiques. Plus un répertoire contient de fichiers, plus il devient long à traiter.

Ces instructions sont valides pour macOS, Linux ou si tu utilises le sous-système Windows pour Linux (WSL).

Voici pourquoi je te recommande cette pratique. À chaque fois qu’un ordinateur entre dans un répertoire, il doit lire tout son index pour pouvoir déterminer la position de chaque fichier sur un disque dur. C’est une opération qui prend un temps proportionnel au nombre de fichiers et de dossiers qu’il contient.

Si on sépare les fichiers dans des sous-répertoires alphabétiques, le traitement est beaucoup plus rapide, parce qu’il va y avoir seulement 26 répertoires au premier niveau, et chacun de ceux-ci va contenir en moyenne 26x moins de fichiers !

Le navigateur de fichiers Dolphin affichant des répertoires alphabétiques
Le navigateur de fichiers Dolphin de KDE

🌘 À vos terminaux


Sun Face IconComment classer automatiquement des fichiers dans des répertoires alphabétiques avec Bash ?Sun Face Icon


Ce script Bash crée 26 sous-répertoires alphabétiques, puis déplace chaque fichier dans le répertoire correspondant à sa première lettre. Cette approche réduit le temps de lecture des répertoires de façon significative, car chaque index contient jusqu’à 26 fois moins d’entrées qu’un seul répertoire plat.

C’est ce que nous allons faire ici en utilisant la ligne de commande bash (ou zsh, avec le superbe Oh My Zsh, fortement recommandé, surtout sur macOS).

On définit tout d’abord la séquence des répertoires que l’on veut créer (qu’on appellera prefix, car se sont les préfixe des fichiers à classer). On peut aussi ajouter des chiffres ou d’autres caractères dans cette séquence.

Note qu’ici, j’assume que tous les noms de fichiers sont en minuscules.

# Créer la liste des préfixes
prefix=(a b c d e f g h i j k l m n o p q r s t u v w x y z)

On initialise un compteur à 1

# Initialiser le compteur
i=1

Ensuite, on définit une boucle while de la longueur de notre liste de préfixes. Ici, c’est 26.

# Créer la boucle
while [ ${i} -le 26 ]

À l’intérieur de cette boucle, nous allons effectuer ces trois opérations, pour chacun des préfixes que contient la séquence prefix.

# Lister les commandes à exécuter dans la boucle
do
  # Créer un répertoire
  mkdir ${prefix[${i}]}
  # Déplacer les fichiers dans le bon répertoire
  mv ${prefix[${i}]}* ${prefix[${i}]}/
  # Incrémenter le compteur
  (( i++ ))
done

Si on met tout ça ensemble, voici le résultat:

# Créer la liste des préfixes
prefix=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
# Initialiser le compteur
i=1
# Créer la boucle
while [ ${i} -le 26 ]
# Lister les commandes à exécuter dans la boucle
do
  # Créer un répertoire
  mkdir ${prefix[${i}]}
  # Déplacer les fichiers dans le bon répertoire
  mv ${prefix[${i}]}* ${prefix[${i}]}/
  # Incrémenter le compteur
  (( i++ ))
done

J’espère t’avoir aidé dans ton grand ménage du printemps informatique !

Pour découvrir Bash, je t’invite à suivre ce tutoriel sur Wikibooks.

Offre de service

Shooting Stars IconConfiguration Express — 1 heure — 245 $Shooting Stars Icon

Un problème de configuration qui te semble insurmontable ? Environ une heure, en moyenne, je configure tes courriels, DNS, accès et conformité loi 25. Les suivis sont inclus pour valider ou corriger des configurations additionnelles au besoin. Tu repars avec une solution fonctionnelle, pas un devis.

Règle ton problème maintenant — 245 $
Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes