5. Gérer ses fichiers en ligne de commande

Les navigateurs de fichiers utilisent des commandes texte pour permettre une gestion graphique des fichiers. Il est parfaitement possible de gérer ses fichiers directement dans un émulateur de terminal en ligne de commande pure. Entre les deux se trouvent Midnight Commander, mc pour les intimes, ou Ranger des gestionnaires de fichier en ligne de commande. Quelle différence avec une gestion directement dans la console ?

Fondamentalement, le principe de fonctionnement de mc repose sur sa présentation des fichiers dans deux volets gauche et droite. Il ne faut pas perdre cela de vue. Par ailleurs, en lieux et place de commandes texte, les touches F1, … ou même la souris prennent un rôle important.

Midnight Commander

En bas de la fenêtre, se trouvent des nombres correspondant chacun au touches F1, F2, … avec en regard un mot introduisant leur rôle. Par exemple, <1 Aide> fait comprendre que la touche <F1> permet d’obtenir l’aide. Ainsi aussi, <F2> donne accès à un menu permettant différentes opérations sur les fichiers, <F3> lance un visualiseur de fichier prédéfini, <F4> lance un éditeur de texte prédéfini sur le fichier sélectionné, <F5> copie un fichier d’un volet à l’autre (il faut au préalable sélectionner la destination dans le volet opposé à celui où est sélectionné le fichier), <F6> coupe colle un fichier sélectionné dans le volet opposé ou le renomme si on spécifie un autre nom, <F7> crée un répertoire, <F8> supprime un fichier ou un répertoire, <F9> bascule entre la barre de menu et les volets, <F10> permet de quitter les menus sélectionnés ou mc lui-même.
On peut aussi accéder à ces fonctions à l’aide de la souris.

Tout en haut, se trouvent les menus <Gauche>, <Fichier>, <Commande>, <Options> et <Droite> dont chaque élément est clairement décrit par son nom. C’est évidemment là que se trouvent les avantages de mc sur la ligne de commande pure.
Par exemple, dans le menu fichier se trouve un item «Chmod» permettant de modifier les droits des fichiers à la souris en cliquant simplement sur une liste très explicite.
Je vous laisse découvrir le reste.

Finalement, la ligne de commande est toujours accessible juste au-dessus de la barre des fonctions F1, …

Ranger

Utilisation

Il s’agit ici d’un gestionnaire de fichier remarquable par sa simplicité. Même s’il est configurable différemment, l’idée est de présenter l’arborescence à trois niveaux. Au centre, une colonne avec le répertoire dans lequel on se trouve, à gauche les fichier ou dossiers du répertoire supérieur et à droite ceux du répertoire inférieur. C’est tout. Aucun bandeau supplémentaire.

Pour agir sur les fichier ou dossiers sélectionnés, deux méthodes sont possibles :

  • une touche de fonction ou un équivalent clavier ou
  • la touche deux-points (:) qui donne un accès direct à la ligne de commande dans le répertoire de travail.

Dans le premier cas, il faut connaître les associations de touches-actions. Elles sont décrites dans le document ci-dessous fourni sur le site de Ranger.

Les touches spécifiques à Ranger

Quant à la seconde manière d’agir, elle nous relie directement au terminal et je ne vais pas décrire ici les commandes qui lui sont spécifiques.

Commandes spécifiques

Par contre, celle-ci permet d’accéder à des fonctions spécifique à Ranger. Un unique exemple suffira. Comment afficher dans Ranger les fichiers cachés ? Simplement en modifiant au vol la préférence du navigateur correspondant à l’affichage de ces fichiers. Pour cela, il faut passer en ligne de commande à l’aide de la touche deux-points (:) et écrire :

:set show_hidden true

:set show_hidden false

pour afficher ou cacher les fichiers cachés.

Il existe cependant un raccourci permettant de faire cela plus facilement :

CTRL h

Il s’agit d’une bascule : un pression et on voit les fichiers cachés, une autre et ils disparaissent

Équivalents clavier

Reste à dire que Ranger dispose d’équivalents claviers qui ne dépayseront pas les utilisateurs de vi, ce qui est une très bonne chose.

Par exemple, pour couper/copier/coller des fichiers d’un répertoire à un autre, il suffit de les sélectionner avec la barre d’espace, puis pour les couper taper dd ou pour les coller taper yy, d’aller dans le répertoire de destination et de taper pp.

Pour choisir quel logiciel utiliser pour ouvrir un fichier, il suffit de presser la touche r et Ranger proposera tous les logiciels disponibles pour ce type de fichier dans un menu déroulant.

Raccourcis

Ranger permet aussi de mémoriser un raccourci vers un dossier. Pour cela, il faut se placer DANS le dossier en question, c’est-à-dire qu’il doit se trouver dans la colonne de gauche et qu’on doit voir au milieu les fichiers qu’il contient. Ensuite, il faut presser la touche m suivie d’une autre touche. Par exemple : mz. La touche z sera alors associée au répertoire en question. Pour s’y rendre ensuite, il suffit d’utiliser l’apostrophe : ‘ ou ` de la manière suivante : ‘z. Ensuite, pour revenir directement au répertoire d’origine, il suffit d’utiliser deux apostrophes successifs (pas des guillemets  » !) :  ».

Onglets de navigation

Vous pouvez naviguer plus aisément dans vos fichiers en utilisant des onglets. Les onglets sont numérotés et visibles en haut à droite à partir du moment où il y en a plus d’un (ainsi taper Alt-1 ne fera rien). Les touches suivantes sont utilisables :

  • Alt-N : pour créer l’onglet N,
  • Tab et Shift-Tab : permet d’aller en avant et en arrière dans les onglets respectivement,
  • q : pour fermer l’onglet sur lequel on se trouve.

Applications

Pour configurer les applications par défaut lancées par ranger (mais vous pouvez toujours obtenir une liste d’applications pour le fichier sélectionné avec la touche r), il faut configurer le fichier ~/config/rifle.conf. Par exemple, pour lancer le visualiseur d’images en ligne de commande Feh, il faut déplacer la ligne :

mime ^image, has feh, X, flag f = feh -- "$@"

au haut des commandes de type mime ^image. Car, c’est la première commande qui est celle par défaut.On l’aura compris, pour lancer une commande ranger il faut taper deux-points (:) et pour lancer un programme directement dans la ligne de commande, soit on passe par une demande de shell à ranger :

:shell

soit on utilise le point d’exclamation (!).

Une application intéressante du ! est qu’on peut écrire :

:shell texmaker monfichier.tex &

car, l’ouverture d’un fichier avec r et un programme, ne détache pas celui-ci de ranger. Il est donc impossible de revenir à ranger en laissant le programme tourner en arrière plan. Quand on quitte ranger, le programme s’interrompt. Avec l’esperluette (&) de la commande précédente, on détache le programme (ici texmaker) de ranger et on peut continuer à utiliser ranger parallèlement.

Root

Il est aussi intéressant de savoir qu’on peut ouvrir un fichier en root à l’aide du flag r :

:open_with r vim

et comme le raccourci pour :open_with est r, on pourrait écrire :

r r vim

De plus, on peut aussi ouvrir un fichier dans une nouvelle console avec le flag t :

:open_with t vim

Remarquez ici l’absence de tiret. Il aurait aussi été possible d’écrire :

:shell -t vim fichier

Enfin, une commande extrêmement pratique. Plutôt que d’utiliser r pour ouvrir avec un programme particulier un fichier, on peut utiliser l (la lettre l, comme lulu) pour ouvrir un fichier selon son extension. Ce qui est très intéressant, c’est que avec vim, le fichier s’ouvre directement dans le terminal dans lequel on a lancé ranger. Vim remplace donc provisoirement ranger et quand on le quitte on revient à ranger. C’est TOP.

Applications personnelles

Là où Ranger montre sa puissance, c’est par le moyen très simple d’augmenter ses capacités. Pour exemple, prenons une commande très utile qui n’est pas implémentée, celle de l’archivage. La création d’une archive zip ou son extraction se fait avec un navigateur comme PCManFM par exemple sous un simple click-droit par compresser ou extraire ici respectivement.

Pour implémenter ce comportement sous Ranger, il faut savoir qu’on peut définir des commandes personnelles dans le fichier :

~/.config/ranger/commands.py

Ce fichier va permettre à l’utilisateur d’augmenter les commandes de base de Ranger se trouvant elles dans le fichier /etc/ranger/commands_full.py. Celui-ci peut servir de modèle pour la création de ses propres commandes.

Les commandes sont écrites en python et pour exemple de la déclaration des commandes de compression et d’extraction, nous allons reprendre les codes disponibles à l’adresse : https://wiki.archlinux.org/title/Ranger#Compression. Le contenu de ce site étant publié sous GFDL, nous les reproduisons ici en remerciant ses auteurs.

Leur fonctionnement requiert la librairie « atool » qui’il faut installer préalablement avec apt.

Relevez que les deux premières lignes sont à placer au début du fichier commands.py, après le commentaire « You can import any python module as needed. ».

import os
from ranger.core.loader import CommandLoader

class compress(Command):
    def execute(self):
        """ Compress marked files to current directory """
        cwd = self.fm.thisdir
        marked_files = cwd.get_selection()

        if not marked_files:
            return

        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()

        original_path = cwd.path
        parts = self.line.split()
        au_flags = parts[1:]

        descr = "compressing files in: " + os.path.basename(parts[1])
        obj = CommandLoader(args=['apack'] + au_flags + \
                [os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr, read=True)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

    def tab(self, tabnum):
        """ Complete with current folder name """

        extension = ['.zip', '.tar.gz', '.rar', '.7z']
        return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]

Ce code est celui qui va permettre la compression.

Son utilisation se fait naturellement en sélectionnant les fichiers (avec la barre d’espace) ou le répertoire cibles et en lançant la commande :

: compress un_nom.zip

On voit dans le code que les extensions « .zip », « .tar.gz », « .rar » et « .7z » sont possibles.

Vous pouvez ensuite placer le code suivant :

import os
from ranger.core.loader import CommandLoader

class extract_here(Command):
    def execute(self):
        """ extract selected files to current directory."""
        cwd = self.fm.thisdir
        marked_files = tuple(cwd.get_selection())

        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()

        one_file = marked_files[0]
        cwd = self.fm.thisdir
        original_path = cwd.path
        au_flags = ['-x', cwd.path]
        au_flags += self.line.split()[1:]
        au_flags += ['-e']

        self.fm.copy_buffer.clear()
        self.fm.cut_buffer = False
        if len(marked_files) == 1:
            descr = "extracting: " + os.path.basename(one_file.path)
        else:
            descr = "extracting files from: " + os.path.basename(
                one_file.dirname)
        obj = CommandLoader(args=['aunpack'] + au_flags
                            + [f.path for f in marked_files], descr=descr,
                            read=True)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

Ce code est celui qui va permettre d’extraire les fichiers de l’archive. Son utilisation est encore plus simple que pour la création d’une archive. Il suffit de sélectionner le fichier dans ranger et de lancer la commande :

:extract_here

Évidemment, cette structure ouvre la possibilité à une infinité de commandes personnelles facilement réalisables en python.

Configuration

Pour faire de vi l’éditeur de texte lancé par défaut depuis ranger, il faut simplement changer la variable d’environnement que ranger utilise par défaut pour savoir quel éditeur utiliser, dans votre ~./bash.rc ou 

export $EDITOR=vi

et si vous voulez le faire au niveau de ranger, remplacer $EDITOR par vi dans les lignes :

#mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@"
mime ^text, label editor = ${VISUAL:-vi} -- "$@"
#!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-vi} -- "$@"

comme cela est fait ci-dessus (les lignes commentés par # sont les lignes originales).


Une option intéressante permet de présenter chaque répertoire autant de fois qu’il contient d’élément avec à chaque fois, après un slash, l’un de ses éléments. Cela augmente considérablement le nombre d’éléments, évidemment, mais permet de mieux voir le contenu. Il faut pour cela taper :

:flat 1

et pour revenir au mode normal :

:flat 0

Liens intéressant :

Ranger LE navigateur de fichier en mode terminal

https://www.digitalocean.com/community/tutorials/installing-and-using-ranger-a-terminal-file-manager-on-a-ubuntu-vps

Laisser un commentaire