HervéRenault.fr

logo de Bash

Effacer des noms de fichiers sur la ligne de commande avec Bash

Avec ses réglages par défaut, Bash permet d'effacer un mot sur la ligne de commande avec la combinaison de touches Alt + Retour arrière. C'est pratique, mais pas toujours suffisant.

Imaginons que j'ai des noms de fichiers très longs du type
/foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/machin-bidule-truc-981321-RPXS-456456 avec plein de sous-répertoires et de tirets, autrement dit : des noms de fichiers illisibles. Imaginons qu'il est tard, et que j'ai mal aux yeux.

Imaginons que je viens de faire less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/machin-bidule-truc-981321-RPXS-456456 et je veux maintenant faire less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/zljxdr-bidule-truc-Z34571-WIGJ-0E4576 (et imaginons que je n'avais pas anticipé en faisant d'abord less /foo-1687321681/bar-XSDRYJXJ-87215121-GGGG/* parce que personne n'est parfait 😉)

Si je reviens sur la ligne de commande précédente, j'ai le curseur juste après le "mot" 456456, et je dois faire plusieurs Alt + Retour arrière. Je ne peux pas faire Ctrl + w qui effacerait tout le nom de fichier et ne laisserait que less. Comme j'ai mal aux yeux, j'aimerais bien avoir une seule combinaison de touches pour tout effacer jusqu'au slash du répertoire bar-XSDRYJXJ-87215121-GGGG/

Heureusement, Bash a une option : la commande Readline unix-filename-rubout

Pour activer cette commande, il faut choisir une combinaison de touches, par exemple Ctrl + Retour arrière et saisir, soit dans le terminal pour la session en cours, soit dans ~/.bashrc ou ~/.bash_aliases de manière permanente : bind '\C-h:unix-filename-rubout'

Notes :