Hvernig á að vinna með skráarnöfn sem hafa bil og sérstaka stafi í Linux


Við rekumst á skrár og möppur sem heita mjög reglulega. Í flestum tilfellum er nafn skráar/möppu tengt innihaldi skráar/möppu og byrjar á tölu og stöfum. Alfa-töluleg skráarheiti eru frekar algeng og mjög mikið notuð, en það er ekki raunin þegar við þurfum að takast á við skráar-/möppuheiti sem eru með sértáknum.

Athugið: Við getum haft skrár af hvaða gerð sem er en til einfaldleika og auðvelda útfærslu munum við fást við textaskrá (.txt), í gegnum greinina.

Dæmi um algengustu skráarnöfn eru:

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

Dæmi um töluleg skráarheiti eru:

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

Dæmi um alfa-töluleg skráarnöfn eru:

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

Dæmi um skráarnöfn sem hafa sérstaf og eru ekki mjög algeng:

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

Ein augljósasta spurningin hér er - hver í ósköpunum býr til/sér við nafn skráa/möppu með Hash (#), semíkommu (;), a strik (-) eða einhver annar sérstafur.

Ég er sammála þér, að slík skráarnöfn eru ekki algeng samt ætti skelin þín ekki að brotna/gefa upp þegar þú þarft að takast á við slík skráarnöfn. Tæknilega séð er allt meðhöndlað sem skrá í Linux, hvort sem það er mappa, bílstjóri eða eitthvað annað.

Að takast á við skrá sem hefur strik (-) í nafni hennar

Búðu til skrá sem byrjar á striki (-), segðu -abx.txt.

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

Ástæðan fyrir villunni hér að ofan, þessi skel túlkar allt eftir strik (-), sem valmöguleika, og augljóslega er enginn slíkur valkostur, þess vegna er villa.

Til að leysa slíka villu verðum við að segja Bash skelinni (já þetta og flest önnur dæmi í greininni eru fyrir BASH) að túlka ekki neitt eftir sérstaf (hér strik), sem valmöguleika.

Það eru tvær leiðir til að leysa þessa villu sem:

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

Þú getur staðfest skrána sem þannig er búin til með báðum ofangreindum hætti með því að keyra skipanir ls eða ls -l fyrir langa skráningu.

$ ls -l

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

Til að breyta ofangreindri skrá geturðu gert:

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

Athugið: Þú getur skipt út nano með hvaða ritstjóra sem er að eigin vali, segðu vim sem:

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

Á sama hátt til að færa slíka skrá þarftu að gera:

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

og til að eyða þessari skrá þarftu að gera:

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

Ef þú ert með fullt af skrám í möppu sem heitir strik, og þú vilt eyða þeim öllum í einu, gerðu eftirfarandi:

$ rm ./-*

1. Sama regla og fjallað er um hér að ofan fylgir fyrir hvaða fjölda bandstrik sem er í nafni skrárinnar og fyrirkomulag þeirra. Þ.e. -a-b-c.txt, ab-c.txt, abc-.txt osfrv.

2. Sama regla og fjallað er um hér að ofan fylgir fyrir heiti möppunnar sem hefur hvaða fjölda stafsetningar sem er og tilvik þeirra, nema sú staðreynd að til að eyða möppunni þarftu að nota 'rm -rf' sem:

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

Að takast á við skrár með HASH (#) í nafninu

Táknið # hefur allt aðra merkingu í BASH. Allt eftir # er túlkað sem athugasemd og þess vegna vanrækt af BASH.

búa til skrá #abc.txt.

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

Ástæðan fyrir villunni hér að ofan, að Bash er að túlka #abc.txt athugasemd og hunsar þar af leiðandi. Svo skipunin snerta hefur verið send án skráar Operand, og þess vegna er villa.

Til að leysa slíka villu gætirðu beðið BASH að túlka # ekki sem athugasemd.

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

og staðfestu skrána sem var búin til sem:

$ ls -l

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

Búðu til skrá sem heitir nafnið sem inniheldur # hvar sem er nema á betli.

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

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

Keyrðu 'ls -l' til að staðfesta það:

$ 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

Hvað gerist þegar þú býrð til tvær skrár (segðu a og #bc) í einu:

$ touch a.txt #bc.txt

Staðfestu skrána sem var búið til:

$ ls -l

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

Augljóst er frá ofangreindu dæmi að það bjó aðeins til skrána „a“ og skrá „#bc“ hefur verið hunsuð. Til að framkvæma ofangreindar aðstæður með góðum árangri getum við gert,

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

og staðfestu það sem:

$ 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

Þú getur fært skrána sem:

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

Afritaðu það sem:

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

Þú getur breytt því þannig að þú notir valið á ritstjóranum sem:

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

Og eyða því sem:

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

Til að eyða öllum skrám sem hafa hash (#) í skráarnafninu geturðu notað:

 # rm ./#*

Að takast á við skrár með semíkommu (;) í nafninu

Ef þú ert ekki meðvitaður, virkar semíkomma sem skipanaskilja í BASH og kannski annarri skel líka. Semíkomma gerir þér kleift að framkvæma nokkrar skipanir í einu og virkar sem skiljur. Hefur þú einhvern tíma tekist á við hvaða skráarnafn sem er með semíkommu? Ef ekki hér muntu gera það.

Búðu til skrá með semípunkti.

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

Ástæðan fyrir ofangreindri villu, að þegar þú keyrir ofangreinda skipun BASH túlkaðu snertingu sem skipun en fann enga skráaroperanda á undan semíkommu og þess vegna tilkynnir hún um villu. Það greinir einnig frá annarri villu þar sem 'abc.txt' skipun fannst ekki, aðeins vegna þess að eftir semíkommu bjóst BASH við annarri skipun og 'abc.txt', er ekki skipun.

Til að leysa slíka villu skaltu segja BASH að túlka ekki semíkommu sem skipanaskilju, sem:

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

Athugið: Við höfum sett skráarnafnið með einni gæsalappa . Það segir BASH að ; sé hluti af skráarnafni en ekki skipanaskil.

Afganginn af aðgerðinni (þ.e. afrita, færa, eyða) á skránni og möppunni með semíkommu í nafni hennar er hægt að framkvæma beint áfram með því að setja nafnið í einni gæsalappa.

Að takast á við aðra sérstafi í nafni skráar/möppu

Ekki þarfnast neitt aukalega, gerðu það bara á venjulegan hátt, eins og einfalt skráarnafn eins og sýnt er hér að neðan.

$ touch +12.txt 

Þú verður að láta skráarheiti fylgja með einni gæsalappa, eins og við gerðum þegar um semíkommu var að ræða. Restin af hlutunum er beint fram..

$ touch '$12.txt'

Þú þarft ekki að gera neitt öðruvísi, meðhöndlaðu það sem venjulega skrá.

$ touch %12.txt

Að hafa stjörnu í skráarnafni breytir engu og þú getur haldið áfram að nota hana sem venjulega skrá.

$ touch *12.txt

Athugið: Þegar þú þarft að eyða skrá sem byrjar á * skaltu aldrei nota eftirfarandi skipanir til að eyða slíkum skrám.

$ rm *
or
$ rm -rf *

Notaðu í staðinn,

$ rm ./*.txt

Settu bara skráarnafnið inn í einni tilvitnun og restin af hlutunum er eins.

$ touch '!12.txt'

Ekkert aukalega, meðhöndlaðu skráarnafn með At Sign sem órmal skrá.

$ touch '@12.txt'

Engin auka athygli krafist. Notaðu skrá með ^ í skráarnafni sem venjulega skrá.

$ touch ^12.txt

Skráarnafn ætti að vera með gæsalappir og þú ert tilbúinn að fara.

$ touch '&12.txt'

Ef skráarnafnið er með sviga þarftu að láta skráarnafn fylgja með stökum gæsalöppum.

$ touch '(12.txt)'

Engin auka umönnun þarf. Farðu bara með það sem aðra skrá.

$ touch {12.txt}

Skráarnafn með Chevrons verður að vera sett innan gæsalappa.

$ touch '<12.txt>'

Meðhöndlaðu skráarnafn með hornklofa sem venjulegar skrár og þú þarft ekki að gæta þess sérstaklega.

$ touch [12.txt]

Þeir eru mjög algengir og þurfa ekki neitt aukalega. Gerðu bara það sem þú hefðir gert með venjulegri skrá.

$ touch _12.txt

Að vera með jafngildismerki breytir engu, þú getur notað það sem venjulega skrá.

$ touch =12.txt

Bakstrik segir skel að hunsa næsta staf. Þú verður að láta skráarheiti fylgja með einni gæsalappa, eins og við gerðum þegar um semíkommu var að ræða. Restin af hlutunum er beint fram.

$ touch '.txt'

Þú getur ekki búið til skrá með nafni sem inniheldur skástrik (/), fyrr en skráarkerfið þitt er með galla. Það er engin leið að sleppa við framhjáhögg.

Svo ef þú getur búið til skrá eins og '/12.txt' eða 'b/c.txt' þá er annað hvort skráarkerfið þitt með galla eða þú ert með Unicode stuðning, sem gerir þér kleift að búa til skrá með skástrik. Í þessu tilfelli er framskást ekki raunverulegt framskást heldur Unicode stafur sem lítur út eins og framskást.

Aftur, dæmi þar sem þú þarft ekki að gera neina sérstaka tilraun. Hægt er að meðhöndla skráarnafn með spurningarmerki á sem almennasta hátt.

$ touch ?12.txt

Skrárnar sem byrja á punkti (.) eru mjög sérstakar í Linux og kallast punktaskrár. Þetta eru faldar skrár yfirleitt stillingar eða kerfisskrár. Þú verður að nota rofann '-a' eða '-A' með ls skipuninni til að skoða slíkar skrár.

Það er einfalt að búa til, breyta, endurnefna og eyða slíkum skrám.

$ touch .12.txt

Athugið: Í Linux gætirðu haft eins marga punkta (.) og þú þarft í skráarnafni. Ólíkt öðrum kerfispunktum í skráarnafni þýðir það ekki að aðgreina nafn og ending. Þú getur búið til skrá með mörgum punktum sem:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

og athugaðu það sem:

$ 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

Þú getur haft kommu í skráarnafni, eins mörg og þú vilt og þú þarft ekki neitt aukalega. Gerðu það bara á venjulegan hátt, eins og einfalt skráarnafn.

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

Þú getur haft tvípunkt í skráarnafni, eins marga og þú vilt og þú þarft ekki neitt aukalega. Gerðu það bara á venjulegan hátt, eins og einfalt skráarnafn.

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

Til að hafa tilvitnanir í skráarnafn verðum við að nota skiptiregluna. Þ.e.a.s., ef þú þarft að hafa eina gæsalappa í skráarheiti skaltu láta skráarnafnið fylgja með tvöföldum gæsalöppum og ef þú þarft að hafa tvöfalda gæsalapp í skráarnafni skaltu láta það fylgja með einni tilvitnun.

$ touch "15'.txt"

and

$ touch '15”.txt'

Sumir ritstjórar í Linux eins og emacs búa til öryggisafrit af skránni sem verið er að breyta. Öryggisskráin hefur nafn upprunalegu skráarinnar auk tilde í lok skráarnafnsins. Þú getur haft skrá sem heitir tilde, hvar sem er einfaldlega eins og:

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

Búðu til skrá með nafni sem hefur bil á milli stafa/orðs, segðu „hæ ég heiti avishek.txt“.

Það er ekki góð hugmynd að hafa skráarheiti með bilum og ef þú þarft aðgreina læsilegt nafn ættirðu að nota, undirstrika eða strika. Hins vegar ef þú þarft að búa til slíka skrá þarftu að nota afturábak skástrik sem hunsar næsta staf í henni. Til að búa til ofangreinda skrá verðum við að gera það á þennan hátt..

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

hi my name is avishek.txt

Ég hef reynt að ná yfir allar aðstæður sem þú gætir rekist á. Flestar ofangreindar útfærslur eru beinlínis fyrir BASH Shell og virka kannski ekki í annarri skel.

Ef þér finnst ég hafa misst af einhverju (sem er mjög algengt og mannlegt eðli), geturðu látið tillögu þína fylgja með í athugasemdunum hér að neðan. Vertu í sambandi, haltu áfram að skrifa athugasemdir. Fylgstu með og tengdu! Líkaðu við og deildu okkur og hjálpaðu okkur að dreifa okkur!