Débutant

Maîtriser les substitutions de commandes en Bash avec date, basename, dirname et realpath

Apprenez à combiner date, basename, dirname et realpath en substitution de commandes pour écrire des scripts Bash fiables.

Maîtriser les substitutions de commandes en Bash avec date, basename, dirname et realpath
Difficulté
Facile

La substitution de commandes en Bash sert à récupérer la sortie d'une commande avec $(...) pour la réutiliser immédiatement. Avec date, basename, dirname et realpath, vous pouvez fabriquer des scripts plus fiables pour manipuler des chemins, des noms de fichiers et des sauvegardes horodatées.

Le point clé est simple : utilisez $(commande), puis entourez l'expansion de guillemets doubles quand elle représente un chemin ou un nom de fichier. C'est ce qui évite la plupart des erreurs liées aux espaces et aux caractères spéciaux.

Prérequis

  • Savoir lancer un terminal Bash.
  • Connaître les variables simples comme nom="valeur".
  • Avoir les commandes date, basename et dirname disponibles, ce qui est courant sur les systèmes GNU/Linux.
  • Vérifier la présence de realpath avec command -v realpath.

Matériel nécessaire

  • Un terminal Bash
  • Un dossier de test avec quelques fichiers
  • Les commandes date, basename, dirname et realpath

Étapes

  1. Créer une substitution de commandes simple

    Commencez par capturer la sortie d'une commande dans une variable. Tapez par exemple maintenant="$(date +%F)", puis affichez-la avec echo "$maintenant".

    La syntaxe moderne à retenir est $(...). Elle est plus lisible que les anciens accents graves et se combine mieux avec d'autres substitutions.

  2. Construire un nom de fichier horodaté

    Vue par-dessus l’épaule d’un ordinateur portable avec un terminal affichant une commande qui construit un nom de fichier horodaté, avec des mains sur le clavier et un bureau sobre.

    Utilisez date dans une substitution pour créer des noms uniques et lisibles. Par exemple : sauvegarde="backup-$(date +%F-%H%M%S).tar.gz".

    Vous pouvez ensuite l'utiliser sans réécrire le formatage : echo "$sauvegarde" ou tar -czf "$sauvegarde" dossier/. Le format +%F-%H%M%S évite les espaces et reste triable.

  3. Extraire le nom d'un fichier avec basename

    Gros plan sur un ordinateur portable affichant dans un terminal l’extraction du nom d’un fichier à partir d’un chemin plus long, avec un cadrage net et une lumière naturelle.

    Servez-vous de basename pour récupérer le dernier élément d'un chemin. Exemple : fichier="/tmp/rapports/ventes.csv" puis nom="$(basename "$fichier")".

    La variable nom contiendra ici ventes.csv. C'est utile pour journaliser, renommer ou reconstruire un chemin cible.

  4. Récupérer le dossier parent avec dirname

    Utilisez dirname pour isoler le dossier contenant un fichier. Reprenez l'exemple précédent et tapez dossier="$(dirname "$fichier")".

    Vous obtenez ici /tmp/rapports. Cette information sert souvent à créer un fichier voisin, un journal local ou une copie dans le même dossier.

  5. Normaliser un chemin avec realpath

    Photo réaliste en gros plan d’un ordinateur portable affichant dans un terminal la normalisation d’un chemin de fichier en chemin absolu, sur un bureau simple.

    Avant d'utiliser un chemin fourni par un utilisateur ou construit depuis plusieurs morceaux, convertissez-le en chemin absolu. Exemple : absolu="$(realpath "$fichier")".

    Cette étape permet d'éviter les ambiguïtés liées à ., .. et aux chemins relatifs. Elle simplifie aussi les journaux et les comparaisons entre chemins.

  6. Assembler les commandes dans un script fiable

    Combinez les substitutions pour produire un chemin de sortie propre. Exemple : source="./docs/rapport final.txt", abs_source="$(realpath "$source")", nom="$(basename "$abs_source")", dossier="$(dirname "$abs_source")" et sortie="$dossier/${nom}-$(date +%F).bak".

    Le résultat reste lisible et chaque variable a un rôle clair. Pour afficher ce que le script va faire, utilisez par exemple printf 'Source : %s\nSortie : %s\n' "$abs_source" "$sortie".

  7. Tester les valeurs avant d'agir

    Affichez toujours les chemins calculés avant une commande sensible comme mv, cp ou rm. Un simple printf '%s\n' "$abs_source" "$dossier" "$nom" "$sortie" permet de vérifier le résultat réel des substitutions.

    Vous pouvez aussi stopper le script en cas d'échec d'une commande. Par exemple, si realpath échoue, la variable peut être vide ou inutilisable selon votre logique de script.

Erreurs fréquentes & dépannage

  • Oublier les guillemets doubles : basename $fichier casse facilement avec les espaces. Préférez toujours basename "$fichier".
  • Confondre la commande et sa sortie : date +%F exécute une commande, alors que $(date +%F) insère son résultat dans une autre instruction.
  • Assembler un chemin à la main sans vérifier : un chemin relatif ou contenant .. peut mener au mauvais dossier. realpath aide à lever ce doute.
  • Supposer le comportement exact de realpath partout : selon le système et les options, la gestion d'un chemin inexistant peut varier. Vérifiez la documentation locale avant d'automatiser ce cas.
  • Rendre une ligne illisible : imbriquer trop de substitutions dans une seule commande complique le débogage. Mieux vaut stocker les étapes intermédiaires dans des variables nommées.

Astuces & pour aller plus loin

Préférez des formats de date stables comme +%F ou +%F-%H%M%S pour les noms de fichiers. Ils sont faciles à trier et évitent la plupart des caractères gênants.

Journalisez les chemins absolus plutôt que les chemins relatifs quand vous déboguez un script. Avec realpath, vous voyez tout de suite où le script pointe réellement.

Gardez une variable par idée : source, nom, dossier, sortie. Cette structure réduit les erreurs et rend vos scripts plus simples à relire.

Questions fréquentes

Quelle est la bonne syntaxe pour une substitution de commandes en Bash ?

La syntaxe recommandée est $(commande). Elle remplace la commande par sa sortie standard et reste plus lisible que l'ancienne forme avec accents graves.

Faut-il toujours mettre des guillemets autour de $(...) ?

Dès que la sortie représente un chemin, un nom de fichier ou un texte pouvant contenir des espaces, oui. Utilisez en pratique "$(commande)" ou stockez d'abord la valeur dans une variable puis citez cette variable.

Quand utiliser basename plutôt que dirname ?

Utilisez basename pour obtenir le nom final d'un chemin, par exemple rapport.txt. Utilisez dirname pour récupérer son dossier parent, par exemple /home/alice/docs.

realpath est-il obligatoire dans un script Bash ?

Non, mais il est très utile pour lever les ambiguïtés sur les chemins relatifs. En revanche, le comportement précis à attendre selon l'existence du chemin doit être vérifié sur votre système avec la documentation locale.

Conclusion

Pour construire des scripts Bash fiables sur les chemins et noms de fichiers, retenez surtout ce trio : substitution avec $(...), guillemets doubles et variables intermédiaires claires. Commencez par afficher les valeurs produites par date, basename, dirname et realpath, puis branchez seulement ensuite l'action finale comme cp ou tar.

Commentaires · Aucun commentaire pour l'instant

Soyez le premier à réagir.

Laisser un commentaire