Supprimer l'extension de fichier à l'aide de Bash
-
Utilisez la méthode
cut
pour supprimer l’extension de fichier dans Bash - Problèmes lors de la suppression de l’extension de fichier dans Bash
-
Supprimer l’extension de fichier à l’aide de la commande
basename
dans 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. Latab
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 commandecut
avec les options-f
etd
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).
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