Kaip manipuliuoti failų pavadinimais, turinčiais tarpus ir specialius simbolius Linux


Su failų ir aplankų pavadinimais susiduriame labai reguliariai. Daugeliu atvejų failo/aplanko pavadinimas yra susijęs su failo/aplanko turiniu ir prasideda skaičiumi bei simboliais. Raidiniai-skaitmeniniai failų pavadinimai yra gana įprasti ir labai plačiai naudojami, tačiau tai nėra tas atvejis, kai turime spręsti failo/aplanko pavadinimą, kuriame yra specialių simbolių.

Pastaba: Mes galime turėti bet kokio tipo failus, tačiau, kad būtų paprasčiau ir lengviau juos įdiegti, visame straipsnyje turėsime reikalų su teksto failu (.txt).

Dažniausių failų pavadinimų pavyzdžiai yra šie:

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

Skaitmeninių failų pavadinimų pavyzdžiai yra šie:

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

Alfa-skaitinių failų pavadinimų pavyzdžiai yra šie:

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

Failų pavadinimų, kurie turi ypatingą pobūdį ir nėra labai įprasti, pavyzdžiai:

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

Vienas iš akivaizdžiausių klausimų čia yra: kas žemėje kuria/tvarko failus/aplankus, turėdamas maišos (#) , kabliataškį (;) , brūkšnys (-) ar bet kuris kitas specialusis simbolis.

Aš sutinku su jumis, kad tokie failų pavadinimai nėra įprasti, tačiau jūsų apvalkalas neturėtų sugadinti/atsisakyti, kai turite susidurti su tokiais failų pavadinimais. Kalbant techniškai, kiekvienas dalykas, nesvarbu, ar tai yra aplankas, tvarkyklė ar dar kas nors, „Linux“ sistemoje laikomas failu.

Tvarkomas failas, kurio pavadinime yra brūkšnys (-)

Sukurkite failą, kuris prasideda brūkšniu (-) , tarkim -abx.txt.

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

Minėtos klaidos priežastis, kad apvalkalas viską aiškina po brūkšniu (-) , kaip parinktį, ir akivaizdu, kad tokios galimybės nėra, taigi yra klaida.

Norėdami išspręsti tokią klaidą, turime pasakyti „Bash“ apvalkalui (tai šis ir dauguma kitų pavyzdžių straipsnyje yra skirti „BASH“) kaip specialiojo ženklo (čia brūkšnys) nieko nelaikyti.

Šią klaidą galite išspręsti dviem būdais:

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

Tokiu būdu sukurtą failą galite patikrinti abiem aukščiau išvardytais būdais, ilgam sąrašui vykdydami komandas ls arba ls -l.

$ ls -l

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

Norėdami redaguoti anksčiau pateiktą failą, galite:

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

Pastaba: Galite pakeisti „nano“ bet kuriuo kitu pasirinktu redaktoriumi, sakydami „vim“:

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

Panašiai, kad perkeltumėte tokį failą, turite padaryti:

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

ir norėdami ištrinti šį failą, turite padaryti:

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

Jei aplanke, kurio pavadinime yra brūkšnys, yra daug failų ir norite juos visus ištrinti vienu metu, atlikite šiuos veiksmus:

$ rm ./-*

1. Ta pati taisyklė, kaip aptarta pirmiau, taikoma bet kokiam failo pavadinimo šnipų skaičiui ir jų atsiradimui. Viz., -A-b-c.txt, ab-c.txt, abc-.txt ir kt.

2. Ta pati taisyklė, kaip aptarta aukščiau, taikoma aplanko, turinčio bet kokį skaičių taškų, pavadinimui ir jų atsiradimui, išskyrus tai, kad ištrindami aplanką turite naudoti „rm -rf“ kaip:

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

Tvarkyti failus, kurių pavadinime yra HASH (#)

Simbolis # BASH reiškia labai skirtingą reikšmę. Viskas po # yra aiškinama kaip komentaras ir todėl BASH nepaisoma.

sukurkite failą # abc.txt.

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

Minėtos klaidos priežastis, kad Bashas aiškina komentarą # abc.txt ir todėl ignoruoja. Taigi komanda „touch“ buvo perduota be failo „Operand“, taigi yra klaida.

Norėdami išspręsti tokią klaidą, galite paprašyti BASH neišaiškinti # kaip komentaro.

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

ir patikrinkite ką tik sukurtą failą kaip:

$ ls -l

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

Dabar sukurkite failą, kurio pavadinime yra # bet kurioje vietoje, išskyrus elgetą.

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

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

Paleiskite „ls -l“, kad tai patvirtintumėte:

$ 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

Kas nutiks, kai sukursite du failus (tarkime a ir #bc) vienu metu:

$ touch a.txt #bc.txt

Patikrinkite ką tik sukurtą failą:

$ ls -l

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

Iš aukščiau pateikto pavyzdžio akivaizdu, kad sukurtas tik failas „a“, o failas „#bc“ buvo ignoruojamas. Norėdami sėkmingai įvykdyti minėtą situaciją, galime tai padaryti,

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

ir patikrinkite kaip:

$ 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

Failą galite perkelti kaip:

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

Nukopijuokite jį kaip:

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

Galite redaguoti kaip pasirinktą redaktorių kaip:

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

Ir ištrinkite jį kaip:

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

Norėdami ištrinti visus failus, kurių failo pavadinime yra maišos (#), galite naudoti:

 # rm ./#*

Tvarkyti failus, kurių pavadinime yra kabliataškis (;)

Jei nežinote, kabliataškis veikia kaip komandų skyriklis BASH ir galbūt kitame apvalkale. Kabliataškis leidžia vienu metu atlikti kelias komandas ir veikia kaip separatorius. Ar kada susidūrėte su kokiu nors failo pavadinimu, kuriame yra kabliataškis? Jei ne čia, tai padarysi.

Sukurkite failą, kuriame yra kabliataškis.

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

Minėtos klaidos priežastis yra ta, kad paleidus aukščiau nurodytą komandą, BASH „touch“ interpretuoja kaip komandą, bet prieš kabliataškį negalėjo rasti jokio failo operando ir todėl praneša apie klaidą. Taip pat pranešama apie dar vieną klaidą, kurios „abc.txt“ komanda nerasta, tik todėl, kad po kabliataškio BASH tikėjosi kitos komandos, o „abc.txt“ nėra komanda.

Norėdami išspręsti tokią klaidą, pasakykite BASH, kad kabliataškis nebus aiškinamas kaip komandų skyriklis, kaip:

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

Pastaba: failo pavadinimą pridėjome viena citata . BASH pasako, kad ; yra failo vardo dalis, o ne komandų skyriklis.

Likusią failo ir aplanko, kurio pavadinime yra kabliataškis, veiksmą (t. Y. Kopijuoti, perkelti, ištrinti) galima atlikti tiesiai į priekį, pavadinimą įtraukiant į vieną kabutę.

Su kitais specialiaisiais simboliais failo/aplanko pavadinime

Nereikia nieko papildomo, tiesiog darykite tai įprastu būdu, tokiu paprastu failo pavadinimu, kaip parodyta žemiau.

$ touch +12.txt 

Failo pavadinimą turite pridėti vienoje kabutėje, kaip tai darėme kabliataškio atveju. Likę dalykai yra tiesiai į priekį ..

$ touch '$12.txt'

Jums nereikia nieko daryti kitaip, traktuokite kaip įprastą failą.

$ touch %12.txt

Žvaigždutė failo pavadinime nieko nekeičia ir galite ją toliau naudoti kaip įprastą failą.

$ touch *12.txt

Pastaba: kai turite ištrinti failą, prasidedantį * , niekada nenaudokite šių komandų tokiems failams ištrinti.

$ rm *
or
$ rm -rf *

Vietoj to naudokite,

$ rm ./*.txt

Tiesiog pridėkite failo pavadinimą vienoje citatoje, o kiti dalykai yra vienodi.

$ touch '!12.txt'

Nieko papildomo, traktuokite failo pavadinimą, turintį „At Sign“, kaip nerimtą failą.

$ touch '@12.txt'

Papildomo dėmesio nereikia. Naudokite failą, kurio pavadinime ^ yra įprastas failas.

$ touch ^12.txt

Failo vardas turėtų būti pateikiamas vienose kabutėse ir esate pasirengę eiti.

$ touch '&12.txt'

Jei failo pavadinime yra skliaustai, failo pavadinimą turite pridėti su vienomis kabutėmis.

$ touch '(12.txt)'

Papildomos priežiūros nereikia. Tiesiog traktuokite kaip kitą failą.

$ touch {12.txt}

Failo pavadinimas, turintis „Chevrons“, turi būti pridėtas vienose kabutėse.

$ touch '<12.txt>'

Laikykite failo pavadinimą, kuriame yra laužtiniai skliaustai, kaip įprastus failus, ir jums nereikia juo rūpintis ypač.

$ touch [12.txt]

Jie yra labai dažni ir nereikalauja nieko papildomo. Tiesiog darykite tai, ką būtumėte padarę naudodami įprastą failą.

$ touch _12.txt

Turėdami lygybės ženklą nieko nepakeisite, galite jį naudoti kaip įprastą failą.

$ touch =12.txt

Nugaros brūkšnys liepia apvalkalui ignoruoti kitą simbolį. Failo pavadinimą turite pridėti vienoje kabutėje, kaip tai darėme kabliataškio atveju. Likę dalykai yra tiesūs.

$ touch '.txt'

Negalite sukurti failo, kurio pavadinime yra pasvirasis pasvirasis brūkšnys (/) , kol failų sistemoje nėra klaidos. Jokiu būdu negalima išvengti pasvirusio priekio.

Taigi, jei galite sukurti tokį failą kaip „/12.txt“ arba „b/c.txt“, tada jūsų failų sistemoje yra klaida arba turite „Unicode“ palaikymą, kuris leidžia jums sukurti failą su pasviruoju brūkšniu. Šiuo atveju pasvirasis pasvirasis brūkšnys yra ne tikras į priekį, o „Unicode“ simbolis, panašus į pasvirąjį brūkšnį.

Vėlgi, pavyzdys, kai nereikia dėti jokių ypatingų bandymų. Klausimo ženklą turintis failo pavadinimas gali būti traktuojamas bendriausiai.

$ touch ?12.txt

Failai, prasidedantys tašku (.) , yra labai ypatingi sistemoje „Linux“ ir vadinami taškiniais failais. Tai yra paslėpti failai, paprastai konfigūracijos arba sistemos failai. Norėdami peržiūrėti tokius failus, turite naudoti jungiklį „-a“ arba „-A“ su „ls“ komanda.

Tokių failų kūrimas, redagavimas, pervadinimas ir ištrynimas yra tiesiog į priekį.

$ touch .12.txt

Pastaba: „Linux“ sistemoje gali būti tiek taškų (.) , kiek reikia failo pavadinime. Skirtingai nuo kitų sistemos taškų failo pavadinime, nereiškia, kad reikia atskirti vardą ir plėtinį. Galite sukurti failą su keliais taškais:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

ir patikrinkite kaip:

$ 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

Kablelį failo pavadinime galite turėti tiek, kiek norite, ir jums nereikia nieko papildomo. Tiesiog darykite tai įprastu būdu, kaip paprastą failo pavadinimą.

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

Failo pavadinime galite turėti dvitaškį, kiek norite, ir jums nereikia nieko papildomo. Tiesiog darykite tai įprastu būdu, kaip paprastą failo pavadinimą.

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

Kad failo pavadinime būtų citatos, turime naudoti keitimo taisyklę. T. y., Jei failo pavadinime turite turėti vieną citatą, pridėkite failo pavadinimą dvigubomis kabutėmis, o jei failo pavadinime turite turėti dvigubą citatą, pridėkite jį viena citata.

$ touch "15'.txt"

and

$ touch '15”.txt'

Kai kurie „Linux“ redaktoriai, pvz., „Emacs“, sukuria redaguojamo failo atsarginę kopiją. Atsarginės bylos failo pavadinimo pabaigoje yra originalaus failo pavadinimas ir tildė. Failą, kurio pavadinime yra tildė, galite turėti bet kurioje vietoje paprasčiausiai taip:

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

Sukurkite failą, kurio pavadinime yra tarpas tarp simbolio/žodžio, pasakykite „labas, mano vardas yra avishek.txt“.

Tai nėra gera idėja turėti failo pavadinimą su tarpais ir jei turite atskirą skaitomą vardą, turėtumėte naudoti, pabraukti ar brūkšniuoti. Tačiau jei turite sukurti tokį failą, turite naudoti pasvirąjį brūkšnį, kuris ignoruoja kitą jo simbolį. Norėdami sukurti aukščiau esantį failą, turime tai padaryti tokiu būdu ..

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

hi my name is avishek.txt

Bandžiau aptarti visus scenarijus, su kuriais galite susidurti. Dauguma aukščiau nurodytų diegimų yra aiškiai skirti „BASH Shell“ ir gali neveikti kitame apvalkale.

Jei manote, kad aš kažko praleidau (tai yra labai įprasta ir žmogaus prigimtis), galite įtraukti savo pasiūlymą į toliau pateiktus komentarus. Palaikykite ryšį, nuolat komentuokite. Palaikykite ryšį ir ryšį! Patinka ir dalinkitės mumis bei padėkite mums plisti!