Nous rencontrons très régulièrement des noms de fichiers et de dossiers. Dans la plupart des cas, le nom du fichier/dossier est lié au contenu du fichier/dossier et commence par un nombre et des caractères. Les noms de fichiers alphanumériques sont assez courants et très largement utilisés, mais ce n'est pas le cas lorsque nous devons traiter des noms de fichiers/dossiers contenant des caractères spéciaux.
Remarque :Nous pouvons avoir des fichiers de n'importe quel type mais pour plus de simplicité et de facilité de mise en œuvre nous aurons affaire à des fichiers texte (.txt ), tout au long de l'article.
Voici des exemples de noms de fichiers les plus courants :
abc.txt avi.txt debian.txt ...
Exemples de noms de fichiers numériques :
121.txt 3221.txt 674659.txt ...
Exemples de noms de fichiers alphanumériques :
eg84235.txt 3kf43nl2.txt 2323ddw.txt ...
Exemples de noms de fichiers qui ont un caractère spécial et qui ne sont pas très courants :
#232.txt #bkf.txt #bjsd3469.txt #121nkfd.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.txt ...
L'une des questions les plus évidentes ici est - qui sur terre crée/traite le nom des fichiers/dossiers ayant un hachage (#)
, un point-virgule (;)
, un tiret (-)
ou tout autre caractère spécial.
Je suis d'accord avec vous, que de tels noms de fichiers ne sont pas courants, mais votre shell ne doit pas se casser/abandonner lorsque vous devez gérer de tels noms de fichiers. De plus, techniquement parlant, tout, que ce soit un dossier, un pilote ou toute autre chose, est traité comme un fichier sous Linux.
Traitement d'un fichier dont le nom contient un tiret (-)
Créez un fichier qui commence par un tiret (-)
, dites -abx.txt .
$ touch -abc.txt
Exemple de sortie
touch: invalid option -- 'b' Try 'touch --help' for more information.
La raison de l'erreur ci-dessus, ce shell interprète tout après un tiret (-)
, comme option, et évidemment il n'y a pas une telle option, d'où l'erreur.
Pour résoudre une telle erreur, nous devons indiquer au shell Bash (ceci et la plupart des autres exemples de l'article concernent BASH ) pour ne rien interpréter après un caractère spécial (ici tiret), en option.
Il existe deux façons de résoudre cette erreur :
$ touch -- -abc.txt [Option #1] $ touch ./-abc.txt [Option #2]
Vous pouvez vérifier le fichier ainsi créé par les deux méthodes ci-dessus en exécutant les commandes ls ou ls -l pour une longue liste.
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt
Pour modifier le fichier ci-dessus, vous pouvez :
$ nano -- -abc.txt or $ nano ./-abc.txt
Remarque :Vous pouvez remplacer nano avec n'importe quel autre éditeur de votre choix dites vim comme :
$ vim -- -abc.txt or $ vim ./-abc.txt
De même, pour déplacer un tel fichier, vous devez faire :
$ mv -- -abc.txt -a.txt or $ mv -- -a.txt -abc.txt
et pour Supprimer ce fichier, il faut faire :
$ rm -- -abc.txt or $ rm ./-abc.txt
Si vous avez beaucoup de fichiers dans un dossier dont le nom contient un tiret, et que vous voulez tous les supprimer d'un coup, faites comme :
$ rm ./-*
Important à noter :
1. La même règle que celle décrite ci-dessus s'applique à tout nombre de traits d'union dans le nom du fichier et à leur occurrence. À savoir, -a-b-c.txt , ab-c.txt , abc-.txt , etc.
2. La même règle que celle décrite ci-dessus s'applique au nom du dossier ayant un nombre quelconque de traits d'union et leur occurrence, à l'exception du fait que pour supprimer le dossier, vous devez utiliser 'rm -rf ‘ comme :
$ rm -rf -- -abc or $ rm -rf ./-abc
Traitement des fichiers ayant HASH (#) dans le nom
Le symbole #
a une signification très différente dans BASH. Tout ce qui suit un #
est interprété comme un commentaire et donc négligé par BASH.
Comprenez-le à l'aide d'exemples :
créer un fichier #abc.txt .
$ touch #abc.txt
Exemple de sortie
touch: missing file operand Try 'touch --help' for more information.
La raison de l'erreur ci-dessus, que Bash interprète #abc.txt un commentaire et donc l'ignorer. La commande touch a donc été transmise sans aucun fichier Operand, d'où l'erreur.
Pour résoudre une telle erreur, vous pouvez demander à BASH de ne pas interpréter # comme commentaire.
$ touch ./#abc.txt or $ touch '#abc.txt'
et vérifiez le fichier que vous venez de créer en tant que :
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt
Créez maintenant un fichier dont le nom contient #
n'importe où sauf à la mendicité.
$ touch ./a#bc.txt $ touch ./abc#.txt or $ touch 'a#bc.txt' $ touch 'abc#.txt'
Exécutez 'ls -l ‘ pour le vérifier :
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:16 a#bc.txt -rw-r--r-- 1 avi avi 0 Jun 8 12:16 abc#.txt
Que se passe-t-il lorsque vous créez deux fichiers (disons un et #bc ) à la fois :
$ touch a.txt #bc.txt
Vérifiez le fichier que vous venez de créer :
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt
Évident de l'exemple ci-dessus, il n'a créé que le fichier 'a ‘ et fichier ‘#bc ‘ a été ignoré. Pour exécuter la situation ci-dessus avec succès, nous pouvons faire,
$ touch a.txt ./#bc.txt or $ touch a.txt '#bc.txt'
et vérifiez-le comme :
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:20 a.txt -rw-r--r-- 1 avi avi 0 Jun 8 12:20 #bc.txt
Vous pouvez déplacer le fichier comme :
$ mv ./#bc.txt ./#cd.txt or $ mv '#bc.txt' '#cd.txt'
Copiez-le sous :
$ cp ./#cd.txt ./#de.txt or $ cp '#cd.txt' '#de.txt'
Vous pouvez le modifier en utilisant l'éditeur de votre choix comme :
$ vi ./#cd.txt or $ vi '#cd.txt'
$ nano ./#cd.txt or $ nano '#cd.txt'
Et supprimez-le en tant que :
$ rm ./#bc.txt or $ rm '#bc.txt'
Pour supprimer tous les fichiers qui ont un hachage (# ) dans le nom du fichier, vous pouvez utiliser :
# rm ./#*
Traitement des fichiers ayant un point-virgule (;) dans leur nom
Au cas où vous ne le sauriez pas, le point-virgule agit comme un séparateur de commande dans BASH et peut-être également dans un autre shell. Le point-virgule vous permet d'exécuter plusieurs commandes en une seule fois et agit comme séparateur. Avez-vous déjà eu affaire à un nom de fichier contenant un point-virgule ? Sinon, vous le ferez.
Créez un fichier contenant un point-virgule.
$ touch ;abc.txt
Exemple de sortie
touch: missing file operand Try 'touch --help' for more information. bash: abc.txt: command not found
La raison de l'erreur ci-dessus, que lorsque vous exécutez la commande ci-dessus, BASH interprète touch en tant que commande mais n'a trouvé aucun opérande de fichier avant le point-virgule et signale donc une erreur. Il signale également une autre erreur que 'abc.txt ' commande introuvable, uniquement parce qu'après le point-virgule, BASH attendait une autre commande et 'abc.txt ', n'est pas une commande.
Pour résoudre une telle erreur, dites à BASH de ne pas interpréter le point-virgule comme séparateur de commande, comme :
$ touch ./';abc.txt' or $ touch ';abc.txt'
Remarque :Nous avons mis le nom du fichier entre apostrophes ''
. Il dit à BASH que ;
fait partie du nom de fichier et non du séparateur de commandes.
Le reste de l'action (à savoir, copier, déplacer, supprimer) sur le fichier et le dossier ayant un point-virgule dans son nom peut être effectué directement en mettant le nom entre guillemets simples.
Traitement des autres caractères spéciaux dans le nom du fichier/dossier
Signe plus (+) dans le nom du fichier
Ne nécessite rien de plus, faites-le de manière normale, comme un simple nom de fichier comme indiqué ci-dessous.
$ touch +12.txt
Signe dollar ($) dans le nom du fichier
Vous devez placer le nom du fichier entre guillemets simples, comme nous l'avons fait dans le cas du point-virgule. Le reste des choses est simple..
$ touch '$12.txt'
Pourcentage (%) dans le nom du fichier
Vous n'avez rien à faire différemment, traitez-le comme un fichier normal.
$ touch %12.txt
Astérisque (*) dans le nom du fichier
Avoir un astérisque dans le nom du fichier ne change rien et vous pouvez continuer à l'utiliser comme fichier normal.
$ touch *12.txt
Remarque :Lorsque vous devez supprimer un fichier qui commence par *
, N'utilisez jamais les commandes suivantes pour supprimer ces fichiers.
$ rm * or $ rm -rf *
Utilisez plutôt,
$ rm ./*.txt
Point d'exclamation (!) dans le nom du fichier
Placez simplement le nom du fichier entre guillemets simples et le reste est le même.
$ touch '!12.txt'
Arobase (@) dans le nom du fichier
Rien de plus, traitez un nom de fichier avec le signe arobase comme un fichier non rmal.
$ touch '@12.txt'
^ dans le nom du fichier
Aucune attention supplémentaire requise. Utiliser un fichier ayant ^
dans le nom du fichier en tant que fichier normal.
$ touch ^12.txt
L'esperluette (&) dans le nom du fichier
Le nom du fichier doit être entouré de guillemets simples et vous êtes prêt à commencer.
$ touch '&12.txt'
Parenthèses () dans le nom du fichier
Si le nom du fichier comporte des parenthèses, vous devez entourer le nom du fichier de guillemets simples.
$ touch '(12.txt)'
Accolades {} dans le nom du fichier
Aucun soin supplémentaire nécessaire. Traitez-le simplement comme un autre fichier.
$ touch {12.txt}
Chevrons <> dans le nom du fichier
Un nom de fichier comportant des chevrons doit être entouré de guillemets simples.
$ touch '<12.txt>'
Crochets [ ] dans le nom du fichier
Traitez les noms de fichiers ayant des crochets comme des fichiers normaux et vous n'avez pas besoin d'en prendre particulièrement soin.
$ touch [12.txt]
Sous le score (_) dans le nom du fichier
Ils sont très courants et ne nécessitent rien de plus. Faites simplement ce que vous auriez fait avec un fichier normal.
$ touch _12.txt
Égal à (=) dans le nom du fichier
Avoir un signe égal à ne change rien, vous pouvez l'utiliser comme fichier normal.
$ touch =12.txt
Traitement de la barre oblique inverse (\)
La barre oblique inverse indique au shell d'ignorer le caractère suivant. Vous devez placer le nom du fichier entre guillemets simples, comme nous l'avons fait dans le cas du point-virgule. Le reste des choses est simple.
$ touch '.txt'
Le cas particulier de la barre oblique
Vous ne pouvez pas créer un fichier dont le nom comprend une barre oblique (/)
, jusqu'à ce que votre système de fichiers ait un bogue. Il n'y a aucun moyen d'échapper à une barre oblique.
Donc, si vous pouvez créer un fichier tel que ‘/12.txt’ ou ‘b/c.txt’ alors soit votre système de fichiers a un bogue, soit vous avez le support Unicode, ce qui vous permet de créer un fichier avec une barre oblique. Dans ce cas, la barre oblique n'est pas une véritable barre oblique mais un caractère Unicode qui ressemble à une barre oblique.
Point d'interrogation (?) dans le nom du fichier
Encore une fois, un exemple où vous n'avez pas besoin de faire une tentative spéciale. Un nom de fichier comportant un point d'interrogation peut être traité de la manière la plus générale.
$ touch ?12.txt
Point (.) dans le nom du fichier
Les fichiers commençant par le point (.)
sont très spéciaux sous Linux et sont appelés fichiers de points. Ce sont des fichiers cachés généralement une configuration ou des fichiers système. Vous devez utiliser le commutateur '-a ' ou '-A ‘ avec la commande ls pour afficher ces fichiers.
La création, l'édition, le changement de nom et la suppression de ces fichiers sont simples.
$ touch .12.txt
Remarque :Sous Linux, vous pouvez avoir autant de points (.)
selon vos besoins dans un nom de fichier. Contrairement à d'autres points système dans le nom de fichier, cela ne signifie pas de séparer le nom et l'extension. Vous pouvez créer un fichier comportant plusieurs points comme :
$ touch 1.2.3.4.5.6.7.8.9.10.txt
et cochez-le comme :
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 14:32 1.2.3.4.5.6.7.8.9.10.txt
Comma (,) dans le nom du fichier
Vous pouvez avoir une virgule dans un nom de fichier, autant que vous le souhaitez et vous n'avez besoin de rien de plus. Faites-le de manière normale, en tant que simple nom de fichier.
$ touch ,12.txt or $ touch ,12,.txt
Deux-points (:) dans le nom du fichier
Vous pouvez avoir deux-points dans un nom de fichier, autant que vous le souhaitez et vous n'avez besoin de rien de plus. Faites-le de manière normale, en tant que simple nom de fichier.
$ touch :12.txt or $ touch :12:.txt
Avoir des guillemets (simples et doubles) dans le nom du fichier
Pour avoir des guillemets dans le nom du fichier, nous devons utiliser la règle d'échange. C'est-à-dire que si vous avez besoin d'avoir un guillemet simple dans le nom du fichier, placez le nom du fichier avec des guillemets doubles et si vous avez besoin d'avoir un guillemet double dans le nom du fichier, mettez-le avec un guillemet simple.
$ touch "15'.txt" and $ touch '15”.txt'
Tilde (~) dans le nom du fichier
Certains éditeurs sous Linux comme emacs créer un fichier de sauvegarde du fichier en cours d'édition. Le fichier de sauvegarde porte le nom du fichier d'origine plus un tilde à la fin du nom de fichier. Vous pouvez avoir un fichier dont le nom inclut le tilde, à n'importe quel endroit simplement comme :
$ touch ~1a.txt or $touch 2b~.txt
Espace blanc dans le nom du fichier
Créez un fichier dont le nom comporte un espace entre caractère/mot, dites "salut je m'appelle avishek.txt ”.
Ce n'est pas une bonne idée d'avoir un nom de fichier avec des espaces et si vous devez un nom lisible distinct, vous devez utiliser un trait de soulignement ou un tiret. Cependant, si vous devez créer un tel fichier, vous devez utiliser une barre oblique inversée qui ignore le caractère suivant. Pour créer le fichier ci-dessus, nous devons le faire de cette façon..
$ touch hi\ my\ name\ is\ avishek.txt hi my name is avishek.txt
J'ai essayé de couvrir tous les scénarios que vous pourriez rencontrer. La plupart des implémentations ci-dessus sont explicitement destinées à BASH Shell et peuvent ne pas fonctionner dans d'autres shells.
Si vous pensez que j'ai raté quelque chose (c'est très commun et de nature humaine), vous pouvez inclure votre suggestion dans les commentaires ci-dessous. Restez connecté, continuez à commenter. Restez à l'écoute et connecté ! Aimez-nous et partagez-nous et aidez-nous à nous propager !