Wéi manipuléiert Dateinumm mat Plazen a spezielle Charakteren am Linux


Mir kommen ganz regelméisseg op Dateien an Ordnernamen. An deene meeschte Fäll sinn Datei-/Dossiernumm mam Inhalt vun der Datei/Dossier verbonnen a fänkt mat Nummer an Zeeche un. Alpha-Numeresch Dateinumm sinn zimlech heefeg a ganz wäit benotzt, awer dëst ass net de Fall wa mir mat Datei-/Dossiernumm këmmeren déi speziell Zeechen an hinnen hunn.

Opgepasst: Mir kënnen Dateie vun all Typ hunn, awer fir Einfachheet an einfach Ëmsetzung wäerte mir mat Textdatei (.txt) am ganzen Artikel beschäftegen.

Beispiller vun de meescht üblech Dateinumm sinn:

abc.txt
avi.txt
debian.txt
...

Beispiller vun numeresche Dateinumm sinn:

121.txt
3221.txt
674659.txt
...

Beispill vun alpha-numeresche Dateinumm sinn:

eg84235.txt
3kf43nl2.txt
2323ddw.txt
...

Beispiller vu Dateinumm déi speziell Charakter hunn an net ganz heefeg sinn:

#232.txt
#bkf.txt
#bjsd3469.txt
#121nkfd.txt
-2232.txt
-fbjdew.txt
-gi32kj.txt
--321.txt
--bk34.txt
...

Eng vun den offensichtlechste Froe hei ass - wien op der Äerd erstellt/handelt mat Dateien/Ordner Numm mat engem Hash (#), e Semi-Colon (;), en Bindestrich (-) oder all aner speziell Zeechen.

Ech stëmmen Iech d'accord, datt esou Dateinumm net heefeg sinn, trotzdem sollt Är Shell net briechen/opginn wann Dir mat esou Dateinumm ze dinn hutt. Och technesch schwätzt all Saach, sief et Dossier, Chauffer oder soss eppes, gëtt als Datei am Linux behandelt.

Ëmgank mat enger Datei déi Bindestrich (-) am Numm huet

Erstellt e Fichier deen mat engem Bindestrich beginnt (-), sot -abx.txt.

$ touch -abc.txt
touch: invalid option -- 'b'
Try 'touch --help' for more information.

De Grond fir uewe Feeler, déi Shell interpretéiert alles no engem Bindestrich (-), als Optioun, a selbstverständlech gëtt et keng sou eng Optioun, dofir ass de Feeler.

Fir esou Feeler ze léisen, musse mir der Bash Shell soen (yup dëst an déi meescht vun den anere Beispiller am Artikel ass fir BASH) näischt nom spezielle Charakter (hei Bindestrich) als Optioun ze interpretéieren.

Et ginn zwou Weeër fir dëse Feeler ze léisen wéi:

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

Dir kënnt d'Datei verifizéieren, déi sou erstallt gëtt duerch béid uewe genannte Weeër andeems Dir Kommandoen ls oder ls -l fir eng laang Oplëschtung leeft.

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 11:05 -abc.txt

Fir déi uewe genannte Datei z'änneren, kënnt Dir maachen:

$ nano -- -abc.txt 
or 
$ nano ./-abc.txt 

Notiz: Dir kënnt Nano duerch all aner Editor vun Ärer Wiel ersetzen, sot vim als:

$ vim -- -abc.txt 
or 
$ vim ./-abc.txt 

Ähnlech fir sou eng Datei ze réckelen musst Dir maachen:

$ mv -- -abc.txt -a.txt
or
$ mv -- -a.txt -abc.txt

a fir dës Datei ze läschen, musst Dir maachen:

$ rm -- -abc.txt
or
$ rm ./-abc.txt 

Wann Dir vill Dateien an engem Dossier hutt, deen den Numm Dash enthält, an Dir wëllt se all op eemol läschen, maacht wéi:

$ rm ./-*

1. Déi selwecht Regel wéi uewen diskutéiert follegt fir all Zuel vun Hypen am Numm vun der Datei an hir Optriede. Viz., -a-b-c.txt, ab-c.txt, abc-.txt, etc.

2. Déi selwecht Regel wéi uewen diskutéiert follegt fir den Numm vum Dossier mat enger Zuel vun Hypen an hir Optriede, ausser de Fakt datt fir den Dossier ze läschen musst Dir 'rm -rf' benotzen als:

$ rm -rf -- -abc
or
$ rm -rf ./-abc

Ëmgank mat Dateien déi HASH (#) am Numm hunn

D'Symbol # huet eng ganz aner Bedeitung am BASH. Alles no engem # gëtt als Kommentar interpretéiert an dofir vum BASH vernoléissegt.

schafen eng Datei #abc.txt.

$ touch #abc.txt
touch: missing file operand
Try 'touch --help' for more information.

De Grond fir uewe Feeler, datt de Bash #abc.txt e Kommentar interpretéiert an dofir ignoréiert. Also de Kommando Touch gouf ouni Datei Operand passéiert, an dofir ass de Feeler.

Fir esou Feeler ze léisen, kënnt Dir BASH froen net # als Kommentar ze interpretéieren.

$ touch ./#abc.txt
or
$ touch '#abc.txt'

a kontrolléiert d'Datei just erstallt wéi:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:14 #abc.txt

Erstellt elo e Fichier deen den Numm # iwwerall enthält ausser beim Bettelen.

$ touch ./a#bc.txt
$ touch ./abc#.txt

or
$ touch 'a#bc.txt'
$ touch 'abc#.txt'

Run 'ls -l' fir et z'iwwerpréiwen:

$ 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

Wat geschitt wann Dir zwee Dateien erstellt (soen a an #bc) gläichzäiteg:

$ touch a.txt #bc.txt

Verifizéiert de Fichier just erstallt:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 12:18 a.txt

Offensichtlech aus dem uewe genannte Beispill ass et nëmmen de Fichier 'a' erstallt an d'Datei '#bc' gouf ignoréiert. Fir déi uewe genannte Situatioun erfollegräich auszeféieren, kënne mir maachen,

$ touch a.txt ./#bc.txt
or
$ touch a.txt '#bc.txt'

a verifizéiert et als:

$ 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

Dir kënnt d'Datei réckelen wéi:

$ mv ./#bc.txt ./#cd.txt
or
$ mv '#bc.txt' '#cd.txt'

Kopéiert et als:

$ cp ./#cd.txt ./#de.txt
or
$ cp '#cd.txt' '#de.txt'

Dir kënnt et änneren wéi Dir Äre Choix vum Editor benotzt wéi:

$ vi ./#cd.txt
or
$ vi '#cd.txt'
$ nano ./#cd.txt
or
$ nano '#cd.txt'

A läschen et als:

$ rm ./#bc.txt 
or
$ rm '#bc.txt'

Fir all Dateien ze läschen déi Hash (#) am Dateinumm hunn, kënnt Dir benotzen:

 # rm ./#*

Ëmgank mat Dateien mat engem Semikolon (;) a sengem Numm

Am Fall wou Dir net bewosst sidd, wierkt Semikolon als Kommando-Separator an BASH a vläicht och aner Shell. Semicolon léisst Iech e puer Kommandoen an engem Wee ausféieren an handelt als Separator. Hutt Dir jeemools mat engem Dateinumm beschäftegt mat engem Semikolon dran? Wann net hei wäert Dir.

Erstellt eng Datei mat Semi-Colon dran.

$ touch ;abc.txt
touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found

De Grond fir uewe genannte Feeler, datt wann Dir den uewe genannte Kommando ausféiert BASH Interpretéiert Touch als Kommando awer konnt kee Dateioperand virum Semikolon fannen an dofir mellt et Feeler. Et bericht och en anere Feeler datt de 'abc.txt' Kommando net fonnt gouf, nëmme well nom Semikolon BASH en anere Kommando an 'abc.txt' erwaart huet, ass kee Kommando.

Fir esou Feeler ze léisen, sot de BASH net fir d'Seminikolon als Kommando-Separator ze interpretéieren, wéi:

$ touch ./';abc.txt'
or
$ touch ';abc.txt'

Notiz: Mir hunn den Dateinumm mat engem eenzegen Zitat zougemaach. Et erzielt BASH datt ; en Deel vum Dateinumm ass an net Kommando-Separator.

De Rescht vun der Handlung (z.B. kopéieren, réckelen, läschen) op der Datei an dem Dossier mat engem Semikolon a sengem Numm kann direkt duerchgefouert ginn andeems den Numm an engem eenzegen Zitat ëmgeschloss ass.

Ëmgank mat anere speziell Zeechen am Fichier/Dossier Numm

Erfuerdert näischt extra, maacht et einfach op normal Manéier, sou einfach Dateinumm wéi hei ënnendrënner.

$ touch +12.txt 

Dir musst den Dateinumm an engem eenzegen Zitat zoumaachen, wéi mir am Fall vum Semikolon gemaach hunn. De Rescht vun de Saachen ass direkt vir ..

$ touch '$12.txt'

Dir musst näischt anescht maachen, behandelt et als normal Datei.

$ touch %12.txt

Wann Dir Asterisk am Dateinumm hutt, ännert näischt an Dir kënnt weiderhin als normal Datei benotzen.

$ touch *12.txt

Opgepasst: Wann Dir e Fichier läsche musst, deen mat * ufänkt, benotzt Ni folgend Kommandoen fir esou Dateien ze läschen.

$ rm *
or
$ rm -rf *

Amplaz benotzt,

$ rm ./*.txt

Schéckt just den Dateinumm an engem eenzegen Zitat an de Rescht vun de Saachen sinn d'selwecht.

$ touch '!12.txt'

Näischt extra, behandelt e Dateinumm mat At Sign als netrmal Datei.

$ touch '@12.txt'

Keng extra Opmierksamkeet erfuerderlech. Benotzt e Fichier mat ^ am Dateinumm als normaler Datei.

$ touch ^12.txt

Dateinumm soll an eenzel Zitater zougemaach ginn an Dir sidd prett ze goen.

$ touch '&12.txt'

Wann de Dateinumm Parenthesis huet, musst Dir den Dateinumm mat eenzelen Zitater zoumaachen.

$ touch '(12.txt)'

Keng Extra Pfleeg néideg. Gitt et just als eng aner Datei.

$ touch {12.txt}

E Dateinumm mat Chevrons muss an eenzel Zitater ageschloss sinn.

$ touch '<12.txt>'

Behandelt Dateinumm mat Square Brackets als normal Dateien an Dir musst net extra oppassen.

$ touch [12.txt]

Si si ganz heefeg a verlaangen näischt extra. Maacht just wat Dir mat enger normaler Datei gemaach hätt.

$ touch _12.txt

Wann Dir en Equal-to-Zeechen hutt, ännert näischt, Dir kënnt et als normal Datei benotzen.

$ touch =12.txt

Backslash erzielt Shell fir den nächste Charakter ze ignoréieren. Dir musst den Dateinumm an engem eenzegen Zitat zoumaachen, wéi mir am Fall vum Semikolon gemaach hunn. De Rescht vun de Saachen sinn direkt vir.

$ touch '.txt'

Dir kënnt net e Fichier erstellen, deen den Numm e Forward Slash (/) enthält, bis Äre Dateiesystem Feeler huet. Et gëtt kee Wee fir e Forward Slash ze entkommen.

Also wann Dir eng Datei wéi '/12.txt' oder 'b/c.txt' erstellt, dann huet entweder Äre Dateiesystem Bug oder Dir hutt Unicode Support, wat Iech erlaabt eng Datei mat Forward Slash ze kreéieren. An dësem Fall ass de Forward Slash net e richtege Forward Slash, awer en Unicode Charakter deen e Forward Slash ausgesäit.

Erëm e Beispill wou Dir kee spezielle Versuch braucht. E Dateinumm mat engem Question Mark kann op déi allgemengst Manéier behandelt ginn.

$ touch ?12.txt

D'Dateien, déi mam Punkt (.) ufänken, si ganz speziell am Linux a ginn Punktdateien genannt. Si sinn verstoppt Dateien allgemeng eng Konfiguratioun oder Systemdateien. Dir musst de Schalter '-a' oder '-A' mam ls Kommando benotzen fir sou Dateien ze gesinn.

Erstellen, änneren, ëmbenennen a läschen vun esou Dateie sinn direkt vir.

$ touch .12.txt

Bemierkung: Am Linux kënnt Dir esou vill Punkte (.) hunn wéi Dir an engem Dateinumm braucht. Am Géigesaz zu anere System Punkten am Dateinumm heescht net den Numm an d'Extensioun ze trennen. Dir kënnt e Fichier mat multiple Punkte erstellen wéi:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

a kontrolléiert et wéi:

$ 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

Dir kënnt Komma an engem Dateinumm hunn, sou vill wéi Dir wëllt an Dir braucht näischt extra. Maachen et einfach normal Manéier, wéi einfach Dateinumm.

$ touch ,12.txt
or
$ touch ,12,.txt

Dir kënnt Colon an engem Dateinumm hunn, sou vill wéi Dir wëllt an Dir braucht näischt extra. Maachen et einfach normal Manéier, wéi einfach Dateinumm.

$ touch :12.txt
or
$ touch :12:.txt

Fir Zitater am Dateinumm ze hunn, musse mir d'Regel vum Austausch benotzen. Dat heescht, wann Dir een eenzegen Zitat am Dateinumm muss hunn, schléisst den Dateinumm mat duebelen Zitaten a wann Dir duebel Zitat am Dateinumm muss hunn, schléisst et mat engem eenzegen Zitat.

$ touch "15'.txt"

and

$ touch '15”.txt'

E puer Editoren op Linux wéi emacs erstellen eng Backupdatei vun der Datei déi geännert gëtt. D'Backupdatei huet den Numm vun der Originaldatei plus eng Tilde um Enn vum Dateinumm. Dir kënnt e Fichier hunn deen den Numm tilde enthält, op all Plaz einfach wéi:

$ touch ~1a.txt
or
$touch 2b~.txt

Erstellt e Fichier den Numm vun deem Raum tëscht Charakter/Wuert huet, sot Hallo mäin Numm ass avishek.txt.

Et ass keng gutt Iddi fir den Dateinumm mat Raum ze hunn a wann Dir e liesbare Numm z'ënnerscheeden, sollt Dir benotzen, ënnersträichen oder strecken. Wann Dir awer esou eng Datei erstellen musst, musst Dir e Réckschnëtt benotzen, deen den nächste Charakter ignoréiert. Fir uewen Datei ze kreéieren musse mir et esou maachen..

$ touch hi\ my\ name\ is\ avishek.txt

hi my name is avishek.txt

Ech hu probéiert all Szenario ze decken déi Dir kënnt begéinen. Déi meescht vun der uewe genannter Implementatioun sinn explizit fir BASH Shell a funktionnéieren vläicht net an enger anerer Shell.

Wann Dir mengt datt ech eppes verpasst hunn (dat ass ganz heefeg a mënschlech Natur), kënnt Dir Är Virschlag an de Kommentarer hei drënner enthalen. Bleift verbonnen, Kommentéiert weider. Bleift ofgeschloss a verbonne! Like an deelt eis an hëlleft eis ze verbreeden!