Comment manipuler les noms de fichiers ayant des espaces et des caractères spéciaux dans Linux

Comment manipuler les noms de fichiers ayant des espaces et des caractères spéciaux dans Linux

Nous rencontrons des fichiers et des dossiers très régulièrement. Dans la plupart des cas, le nom du fichier / dossier est lié au contenu du fichier / dossier et commence par le nombre et les caractères. Le nom de fichier alpha-numeric est assez courant et très largement utilisé, mais ce n'est pas le cas lorsque nous devons gérer le nom de fichier / dossier qui a des caractères spéciaux en eux.

Note: Nous pouvons avoir des fichiers de n'importe quel type, mais pour une simplicité et une implémentation facile, nous allons traiter avec le fichier texte (.SMS), tout au long de l'article.

L'exemple des noms de fichiers les plus courants est:

abc.txt avi.TXT Debian.SMS… 

L'exemple de noms de fichiers numériques est:

121.txt 3221.txt 674659.SMS… 

L'exemple de noms de fichiers alpha-numeriques est:

EG84235.txt 3kf43nl2.txt 2323ddw.SMS… 

Exemples de noms de fichiers qui ont un caractère spécial et qui n'est pas très courant:

# 232.txt #bkf.txt # bjsd3469.txt # 121NKFD.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.SMS… 

L'une des questions les plus évidentes ici est - qui sur terre crée / traite du nom de fichiers / dossiers ayant un hachage (#), un demi-colon (;), un tiret (-) ou tout autre personnage spécial.

Je vous entends que ces noms de fichiers ne sont pas communs, votre shell ne devrait pas casser / abandonner lorsque vous devez traiter de tels noms de fichiers. Parlant également techniquement, tout le dossier que ce soit, le pilote ou toute autre chose est traité comme un fichier dans Linux.

Traitant avec un fichier qui a un tableau de bord () dans son nom

Créer un fichier qui commence par un tableau de bord (-), dire -abx.SMS.

$ touch -abc.SMS 
Échantillon de sortie
Touch: Option non valide - «B 'Try» Touch - help »pour plus d'informations. 

La raison de l'erreur ci-dessus, ce shell interprète n'importe quoi après un tableau de bord (-), Comme l'option, et évidemment il n'y a pas une telle option, c'est donc l'erreur.

Pour résoudre une telle erreur, nous devons dire au bash Shell (yup ceci et la plupart des autres exemples de l'article est pour FRAPPER) ne pas interpréter quoi que ce soit après le caractère spécial (ici Dash), comme option.

Il existe deux façons de résoudre cette erreur comme:

$ touch - -abc.txt [Option #1] $ touch ./-abc.txt [Option # 2]] 

Vous pouvez vérifier le fichier ainsi créé par les deux voies 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 juin 8 11:05 -abc.SMS 

Pour modifier le fichier ci-dessus, vous pouvez faire:

$ nano - -abc.txt ou $ nano ./-abc.SMS 

Note: Vous pouvez remplacer nano Avec tout autre éditeur de votre choix, dites vigueur comme:

$ vim - -abc.txt ou $ vim ./-abc.SMS 

De même pour déplacer un tel fichier, vous devez faire:

$ mv - -abc.txt -a.txt ou $ mv - -a.txt -abc.SMS 

Et pour supprimer ce fichier, vous devez faire:

$ rm - -abc.txt ou $ rm ./-abc.SMS 

Si vous avez beaucoup de fichiers dans un dossier, dont le nom contient Dash et que vous souhaitez les supprimer tous en même temps, faites comme:

$ RM ./ - * 
Important à noter:

1. La même règle que celle discutée ci-dessus suit pour n'importe quel nombre d'hycen au nom du fichier et leur occurrence. À savoir., -abc.SMS, abc.SMS, abc-.SMS, etc.

2. La même règle que celle discutée ci-dessus suit pour le nom du dossier ayant un certain nombre d'hypen et leur occurrence, sauf le fait que pour supprimer le dossier que vous devez utiliser 'RM -RF' comme:

$ rm -rf - -abc ou $ rm -rf ./-abc 

Traitant des fichiers ayant du hash (#) dans le nom

Le symbole # a une signification très différente à Bash. N'importe quoi après un # est interprété comme un commentaire et donc négligé par bash.

Comprenez-le en utilisant des exemples:

Créer un fichier #abc.SMS.

$ touch #abc.SMS 
Échantillon de sortie
Touch: l'opérande de fichier manquant essayez «toucher - help» pour plus d'informations. 

La raison de l'erreur ci-dessus, que Bash interprète #abc.SMS un commentaire et donc ignorer. Ainsi, la commande de commande a été transmise sans aucun opérande de fichier, et donc est l'erreur.

Pour résoudre une telle erreur, vous pouvez demander à Bash de ne pas interpréter # comme commentaire.

$ touche ./#abc.txt ou $ touch '#abc.SMS' 

et vérifier le fichier qui vient d'être créé comme:

$ ls -l total 0 -rw-r - r-- 1 avi avi 0 juin 8 12:14 #abc.SMS 

Créez maintenant un fichier dont le nom contient # n'importe où sauf à la mendicité.

$ touche ./abc.txt $ touch ./abc#.txt ou $ touch 'a # bc.txt '$ touch' ABC #.SMS' 

Courir 'ls -l'Pour le vérifier:

$ ls -l total 0 -rw-r - r-- 1 avi avi 0 juin 8 12:16 abc.SMS -rw-r - r-- 1 avi avi 0 juin 8 12:16 abc#.SMS 

Que se passe-t-il lorsque vous créez deux fichiers (disons un et #avant JC) immediatement:

$ toucher un.txt #bc.SMS 

Vérifiez le fichier qui vient d'être créé:

$ ls -l total 0 -rw-r - r-- 1 avi avi 0 juin 8 12:18 un.SMS 

Évident à partir de l'exemple ci-dessus, il n'a créé que le fichier 'un'et fichier'#avant JC'a été ignoré. Pour exécuter la situation ci-dessus avec succès, nous pouvons faire,

$ toucher un.SMS ./#avant JC.txt ou $ touche un.txt '#bc.SMS' 

et le vérifier comme:

$ ls -l total 0 -rw-r - r-- 1 avi avi 0 juin 8 12:20 un.SMS -rw-r - r-- 1 avi avi 0 juin 8 12:20 #avant JC.SMS 

Vous pouvez déplacer le fichier comme:

$ mv ./#avant JC.SMS ./#CD.txt ou $ mv '#bc.txt "#cd.SMS' 

Copiez-le comme:

$ cp ./#CD.SMS ./ # de.txt ou $ cp '#cd.txt "#de.SMS' 

Vous pouvez le modifier comme utilisant votre choix d'éditeur comme:

$ vi ./#CD.txt ou $ vi '#cd.SMS' 
$ nano ./#CD.txt ou $ nano '#cd.SMS' 

Et supprimez-le comme:

$ RM ./#avant JC.txt ou $ rm '#bc.SMS' 

Pour supprimer tous les fichiers qui ont du hash (#) Dans le nom du fichier, vous pouvez utiliser:

 # RM ./ # * 

Traitant des fichiers ayant un point-virgule (;) dans son nom

Dans le cas où vous n'êtes pas au courant, Semicolon agit comme un séparateur de commande dans Bash et peut-être aussi. Semicolon vous permet d'exécuter plusieurs commandes en un seul coup et agit comme séparateur. Avez-vous déjà traité un nom de fichier qui y a un demi-colon? Si ce n'est pas ici, vous.

Créer un fichier ayant un demi-colon.

$ touch; ABC.SMS 
Échantillon de sortie
Touch: l'opérande de fichier manquant essayez «toucher - help» pour plus d'informations. bash: ABC.txt: commande introuvable 

La raison de l'erreur ci-dessus, que lorsque vous exécutez la commande ci-dessus Bash Interpréter touche En tant que commande mais n'a pu trouver aucun opérande de fichier avant le demi-colon et donc il rapporte l'erreur. Il signale également une autre erreur que 'abc.SMS`` La commande n'est pas trouvée, seulement parce qu'après le demi-collier, Bash s'attendait à une autre commande et 'abc.SMS', n'est pas une commande.

Pour résoudre une telle erreur, dites à Bash de ne pas interpréter le demi-colon comme séparateur de commandes, comme:

$ touche ./';abc.txt 'ou $ touch'; ABC.SMS' 

Note: Nous avons joint le nom du fichier avec un seul devis ". Il dit à Bash que ; fait partie du nom de fichier et non du séparateur de commande.

Reste de l'action (à savoir., copier, déplacer, supprimer) sur le fichier et le dossier ayant un demi-colon dans son nom peuvent être effectués directement en entourant le nom dans une seule citation.

Traitant d'autres caractères spéciaux dans le nom de fichier / dossier

Plus signe (+) dans le nom du fichier

Ne nécessite rien de plus, faites-le normal, aussi simple nom de fichier que ci-dessous.

$ touch +12.SMS 

Signe du dollar ($) dans le nom du fichier

Vous devez enfermer le nom du fichier dans une seule citation, comme nous l'avons fait dans le cas de Semicolon. Le reste des choses est simple…

$ touch '12 $.SMS' 

Pourcentage (%) dans le nom du fichier

Vous n'avez pas besoin de faire quoi que ce soit différemment, traitez-le comme un fichier normal.

$ touch% 12.SMS 

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.SMS 

Note: Lorsque vous devez supprimer un fichier qui commence par *, N'utilisez jamais les commandes suivantes pour supprimer ces fichiers.

$ rm * ou $ rm -rf * 

Utiliser plutôt,

$ RM ./ *.SMS 

Point d'exclamation (!) dans le nom du fichier

Il suffit de joindre le nom du fichier en une seule citation et le reste des choses est le même.

$ touch '!12.SMS' 

Au signe (@) dans le nom du fichier

Rien de plus, traitez un nom de fichier ayant un signe comme un fichier non rmal.

$ touch '@ 12.SMS' 

^ dans le nom de fichier

Aucune attention supplémentaire requise. Utiliser un fichier ayant ^ dans le nom de fichier comme fichier normal.

$ touch ^ 12.SMS 

AmperSand (&) dans le nom de fichier

Le nom de fichier doit être enfermé en citations uniques et vous êtes prêt à partir.

$ touch '& 12.SMS' 

Parenthèses () dans le nom du fichier

Si le nom de fichier a une parenthèse, vous devez enfermer le nom de fichier avec des devis uniques.

$ touch '(12.SMS)' 

Orthèses dans le nom de fichier

Aucun soin supplémentaire nécessaire. Traitez-le simplement comme un autre fichier.

$ touch 12.SMS 

Chevrons dans le nom de fichier

Un nom de fichier ayant des chevrons doit être enfermé en citations uniques.

$ touch '' 

Carrés Brassets [] dans le nom de fichier

Traitez le nom du fichier ayant des crochets comme des fichiers normaux et vous n'avez pas besoin de prendre soin de celui-ci.

$ touch [12.SMS] 

Sous Score (_) dans le nom de fichier

Ils sont très communs et ne nécessitent rien de plus. Faites simplement ce que vous auriez fait avec un fichier normal.

$ touch _12.SMS 

Égal à (=) dans le nom du fichier

Avoir un signe égal à ne rien changer, vous pouvez l'utiliser comme fichier normal.

$ touch = 12.SMS 

Faire face à la barre oblique du dos (\)

Le barre arrière dit à Shell d'ignorer le personnage suivant. Vous devez enfermer le nom du fichier dans une seule citation, comme nous l'avons fait dans le cas de Semicolon. Le reste des choses est simple.

$ touch '.SMS' 

Le cas spécial de la barre d'attaquant

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.SMS' ou 'avant JC.SMS' Ensuite, soit votre système de fichiers a un bogue ou vous avez une prise en charge Unicode, ce qui vous permet de créer un fichier avec Forward Slash. Dans ce cas, la barre de barre avant n'est pas une vraie barre de barre avant mais un personnage Unicode qui se ressemble à une barre oblique avant.

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 ayant un point d'interrogation peut être traité de la manière la plus générale.

$ touche ?12.SMS 

Point à points (.) dans le nom du fichier

Les fichiers commençant par DOT (.) sont très spéciaux en linux et sont appelés fichiers dot. Ce sont des fichiers cachés généralement une configuration ou des fichiers système. Vous devez utiliser Switch '-un' ou '-UN' avec Commande LS Pour afficher de tels fichiers.

La création, l'édition, le renommer et la suppression de ces fichiers sont simples.

$ touche .12.SMS 

Note: Dans Linux, vous pouvez avoir autant de points (.) comme vous avez besoin dans un nom de fichier. Contrairement aux autres points du système dans le nom du fichier, ne signifie pas séparer le nom et l'extension. Vous pouvez créer un fichier ayant plusieurs points comme:

$ touch 1.2.3.4.5.6.7.8.9.dix.SMS 

Et vérifiez-le comme:

$ ls -l total 0 -rw-r - r-- 1 avi avi 0 juin 8 14:32 1.2.3.4.5.6.7.8.9.dix.SMS 

Virgule (,) dans le nom de fichier

Vous pouvez avoir une virgule dans un nom de fichier, autant que vous le souhaitez et vous ne nécessite rien de plus. Faites-le normal, en tant que nom de fichier simple.

$ touch, 12.txt ou $ touch, 12,.SMS 

Colon (:) dans le nom du fichier

Vous pouvez avoir un colon dans un nom de fichier, autant que vous le souhaitez et vous n'avez rien à faire. Faites-le normal, en tant que nom de fichier simple.

$ touch: 12.txt ou $ touch: 12:.SMS 

Avoir des devis (simple et double) dans le nom du fichier

Pour avoir des devis dans le nom du fichier, nous devons utiliser la règle d'échange. je.E, si vous avez besoin d'avoir un seul devis dans le nom du fichier, enfermez le nom du fichier avec des devis doubles et si vous avez besoin d'avoir un double devis dans le nom du fichier, enfermez-le avec un seul devis.

$ touch "15 '.txt "et $ touch '15".SMS' 

Tilde (~) dans le nom de fichier

Certains éditeurs de Linux aiment emacs Créer un fichier de sauvegarde du fichier en cours de modification. Le fichier de sauvegarde a le nom du fichier d'origine plus un tilde à la fin du nom du fichier. Vous pouvez avoir un fichier dont le nom comprend Tilde, à n'importe quel endroit simplement comme:

$ touch ~ 1a.txt ou $ touch 2b ~.SMS 

Espace blanc dans le nom du fichier

Créez un fichier dont le nom a de l'espace entre le caractère / le mot, dites "salut mon nom est Avisisk.SMS".

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, souligner ou vous précipiter. Cependant, si vous devez créer un tel fichier, vous devez utiliser une barre oblique arrière qui en ignore le personnage suivant. Pour créer un fichier ci-dessus, nous devons le faire de cette façon…

$ touch salut \ mon \ name \ est \ Avisisk.SMS salut mon nom est Avisisk.SMS 

J'ai essayé de couvrir tout le scénario que vous pourriez rencontrer. La plupart de la mise en œuvre ci-dessus est explicitement pour Bash Shell et peut ne pas fonctionner dans un autre shell.

Si vous sentez que j'ai manqué quelque chose (c'est très commun et 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!