Répertoires alphabétiques avec Bash

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 de KDE qui affiche une séquence de répertoires alphabétiques
Le navigateur de fichiers Dolphin de KDE

À vos terminaux !

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.

  • Créer un nouveau répertoire avec mkdir
  • Déplacer tous les fichiers qui débutent par le préfixe dans le répertoire
  • Incrémenter le compteur de 1
# 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.

Ces articles pourraient t’intéresser