Supprimer l'extension de fichier à l'aide de Bash

Muhammad Husnain 30 janvier 2023
  1. Utilisez la méthode cut pour supprimer l’extension de fichier dans Bash
  2. Problèmes lors de la suppression de l’extension de fichier dans Bash
  3. Supprimer l’extension de fichier à l’aide de la commande basename dans Bash
Supprimer l'extension de fichier à l'aide de Bash

Ce didacticiel explique la méthode pour couper et afficher des champs spécifiques d’un fichier à l’aide du script bash via la commande cut et les commandes bash basename. Nous verrons également son utilisation en conjonction avec des tuyaux. Ensuite, nous verrons certains problèmes qui peuvent potentiellement survenir lors de la suppression des extensions des noms de fichiers.

Nous examinerons également plusieurs exemples illustratifs de découpage des extensions de fichier d’un nom de fichier et d’affichage uniquement de la version radicale de ce nom de fichier.

Utilisez la méthode cut pour supprimer l’extension de fichier dans Bash

La méthode cut est utilisée pour couper certaines sections d’un fichier à partir de chaque ligne. Cette commande prend un nom de fichier et une option (obligatoire) comme arguments et affiche les résultats sur la console standard. Nous pouvons également l’utiliser pour supprimer les extensions de nom de fichier. Pour cela, l’option -f est utilisée avec le nom de fichier. Voici une brève description de certaines des options disponibles.

  • -b (octets) : cette option supprime des portions de texte de toutes les lignes après un certain nombre d’octets.
  • -c (Colonne) : utilisé pour couper des colonnes spécifiques ou une plage de colonnes du fichier et afficher le reste sur la console.
  • -f (Champ) : Une collection de symboles entre deux symboles délimiteurs (sauf le premier) est dite un champ. Pour chaque ligne du fichier, -f n’affiche que les champs ou portions de ligne mentionnés en utilisant des numéros de champ entiers. La tab est considérée comme un délimiteur par défaut. Cependant, nous pouvons utiliser le drapeau -d pour définir n’importe quel symbole de délimitation défini par l’utilisateur. Le synopsis de la commande cut avec les options -f et d est le suivant.
$ cut -f (comma separated field numbers) -d "delimiting symbol" filename.txt 

D’autres options sont également disponibles, telles que -complement, -output-delimiter et -version. Vous pouvez demander de l’aide en utilisant cut --help pour obtenir plus d’informations.

Exemple 1 : Suppression d’extensions du contenu

Considérez l’exemple suivant pour en savoir plus sur -f et -d. Supposons que webpages.txt contienne les noms de différentes pages Web HTML pour un site Web particulier, chacune sur une nouvelle ligne. Regardons le contenu de webpages.txt en exécutant la commande cat sur le terminal : -

$ cat webpages.txt
index.html
contact_us.html
login.html
dashboard.html

Le script bash suivant coupera les extensions de tous les noms de fichiers dans le fichier webpages.txt et affichera la sortie sur la console standard. Supposons que nous ayons créé un fichier de script shell nommé script et y écrivions le code suivant :

#!/bin/sh
#script file
file=webpages.txt
cut -f 1 -d '.' $file

Ici 1 devant -f est utilisé pour ne conserver que le premier champ, et . dans les options -d indique que les champs doivent être séparés à l’aide du . symbole. Par conséquent, le script conserve tout le texte de chaque ligne de webpages.txt avant le premier . rencontrer. Jetons un coup d’œil à la sortie.

Production :

index
contact_us
login
dashboard

Ici, si nous définissons le numéro de champ sur 2, seul un deuxième champ (c’est-à-dire HTML) sera imprimé à l’écran pour chaque ligne.

Exemple 2 : suppression d’une extension d’un nom de fichier stocké dans une variable à l’aide d’un canal et affichage sur la console

Supposons que vous souhaitiez supprimer l’extension d’un nom de fichier stocké dans une variable. Le morceau de code suivant fera cela:

file=webpages.txt
echo "$file" | cut -f 1 -d '.'

Production :

webpages

Le code ci-dessus redirige le nom de fichier stocké dans la variable file vers la commande cut, qui ne retient que le premier champ du texte.

Exemple 3 : suppression d’une extension d’un nom de fichier stocké dans une variable à l’aide d’un canal et affectation à une autre variable

file=webpages.txt
trimmed=$(echo "$filename" | cut -f 1 -d '.')
echo "$trimmed"

Sortir

webpages

Le code ci-dessus utilise la méthode de substitution de commande pour remplacer la sortie de la commande à l’endroit de la commande. Par conséquent, trimmed est assigné quel que soit le côté droit des sorties de l’assignation.

Problèmes lors de la suppression de l’extension de fichier dans Bash

Lorsqu’un nom de fichier contient le caractère de délimitation lui-même dans le nom de fichier, la formulation ci-dessus ne renverra le texte qu’avant la première rencontre du caractère de délimitation. Nous pouvons résoudre ce problème en coupant le nom à l’envers.

Examinons le code suivant.

file=abcd.efg.hmtl
trimmed=$(echo "$filename" | cut -f 2- -d '.')
echo "$trimmed"

Production :

abcd

Dans le morceau de code ci-dessus, la variable file a un point de plus dans la valeur assignée. La sortie contiendra tout le texte du premier champ, qui se termine à la rencontre du premier point.

Solution : nous pouvons inverser le contenu de file avant de le diriger vers la commande couper. Après cela, la commande cut conservera tous les champs sauf le premier du texte inversé. Maintenant, il doit être inversé à nouveau pour obtenir la réponse finale.

file=abcd.efg.html
trimmed=$(echo "$file" | rev | cut -f 2- -d '.' | rev)
echo "$trimmed"

Production :

abcd.efg.html

Veuillez noter le changement dans la valeur des options f. L’option -f 2- permet de retenir tous les champs dont la position vaut deux ou plus.

Supprimer l’extension de fichier à l’aide de la commande basename dans Bash

Si vous connaissez le nom de l’extension, vous pouvez utiliser la commande basename pour supprimer l’extension du nom de fichier.

file=abcd.abc.html
trimmed=$(basename $file .html)
echo "$trimmed"

Sortir

abcd.abc

Le premier argument de la ligne de commande de la commande basename est le nom de la variable, et le nom de l’extension est le deuxième argument. La commande basename parcourt le texte et imprime tout avant la première rencontre du nom de l’extension (.html dans notre cas).

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Article connexe - Bash File