Kā manipulēt ar faila nosaukumiem, izmantojot Linux atstarpes un īpašas rakstzīmes


Mēs ļoti regulāri sastopamies ar failu un mapju nosaukumiem. Vairumā gadījumu faila/mapes nosaukums ir saistīts ar faila/mapes saturu un sākas ar numuru un rakstzīmēm. Alfa-ciparu faila nosaukums ir diezgan izplatīts un ļoti plaši izmantots, taču tas tā nav, ja mums ir jārisina faila/mapes nosaukums, kurā ir īpašas rakstzīmes.

Piezīme: Mums var būt jebkura veida faili, taču vienkāršības un ērtas ieviešanas nolūkā visā rakstā mēs strādāsim ar teksta failu (.txt).

Visizplatītāko failu nosaukumu piemēri ir:

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

Skaitlisko failu nosaukumu piemēri ir:

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

Alfa-ciparu failu nosaukumu piemēri ir:

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

Failu nosaukumu piemēri, kuriem ir īpašs raksturs un kuri nav ļoti izplatīti:

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

Viens no acīmredzamākajiem jautājumiem ir šāds: kurš uz zemes rada/nodarbojas ar failu/mapju nosaukumu, kuram ir Hash (#) , semikols (;) , domuzīme (-) vai kāda cita īpaša rakstzīme.

Es piekrītu jums, ka šādi failu nosaukumi nav izplatīti, tomēr jūsu čaulai nevajadzētu izlauzties/atteikties, kad jums ir jārisina šādi faila nosaukumi. Arī runājot tehniski, katra lieta, vai tā būtu mape, draiveris vai kas cits, tiek uzskatīta par failu Linux.

Tiek galā ar failu, kura nosaukumā ir domuzīme (-)

Izveidojiet failu, kas sākas ar domuzīmi (-) , teiksim -abx.txt.

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

Iepriekš minētās kļūdas iemesls ir tas, ka čaula visu pēc domuzīmes (-) interpretē kā opciju, un acīmredzot šādas opcijas nav, tāpēc tā ir kļūda.

Lai novērstu šādu kļūdu, mums ir jāpasaka Bash apvalks (šis un lielākā daļa citu raksta piemēru ir domāti BASH) kā opciju neko pēc īpašās rakstzīmes (šeit domuzīme) nedrīkst interpretēt.

Ir divi veidi, kā novērst šo kļūdu:

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

Jūs varat pārbaudīt šādi izveidoto failu abos iepriekš minētajos veidos, ilgstoši ierakstot komandas ls vai ls -l.

$ ls -l

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

Lai rediģētu iepriekš minēto failu, varat rīkoties šādi:

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

Piezīme: Jūs varat aizstāt nano ar jebkuru citu redaktoru pēc savas izvēles, sakiet vim kā:

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

Līdzīgi, lai pārvietotu šādu failu, jums jādara:

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

un, lai izdzēstu šo failu, jums jādara:

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

Ja mapē, kuras nosaukumā ir domuzīme, ir daudz failu un vēlaties tos visus izdzēst uzreiz, rīkojieties šādi:

$ rm ./-*

1. Visiem faila nosaukumā esošajiem burtiem un to parādīšanās gadījumiem ir tāds pats iepriekš aprakstītais noteikums. Viz., -A-b-c.txt, ab-c.txt, abc-.txt utt.

2. Tas pats likums, kas tika apspriests iepriekš, attiecas uz mapes nosaukumu, kurā ir jebkurš skaitlis saites, un to parādīšanos, izņemot faktu, ka mapes dzēšanai jāizmanto ‘rm -rf’ kā:

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

Nodarbojas ar failiem, kuru nosaukumā ir HASH (#)

Simbolam # BASH ir ļoti atšķirīga nozīme. Viss, kas atrodas aiz # , tiek interpretēts kā komentārs un tāpēc BASH to atstāj novārtā.

izveidot failu # abc.txt.

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

Iepriekš minētās kļūdas iemesls, ka Bash interpretē komentāru # abc.txt un tādējādi ignorē. Tātad komandas pieskāriens ir nodots bez faila Operand, un tādējādi tā ir kļūda.

Lai novērstu šādu kļūdu, jūs varat lūgt BASH neinterpretēt # kā komentāru.

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

un pārbaudiet tikko izveidoto failu kā:

$ ls -l

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

Tagad izveidojiet failu, kura nosaukums satur # jebkur, izņemot ubagošanu.

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

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

Palaidiet ‘ls -l’, lai to pārbaudītu:

$ 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 notiek, ja vienlaikus izveidojat divus failus (teiksim a un #bc):

$ touch a.txt #bc.txt

Pārbaudiet tikko izveidoto failu:

$ ls -l

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

Acīmredzot no iepriekš minētā piemēra tas izveidoja tikai failu “a” un fails “#bc” tika ignorēts. Lai veiksmīgi izpildītu iepriekš minēto situāciju, mēs varam to izdarīt,

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

un pārbaudiet to kā:

$ 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

Failu var pārvietot kā:

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

Kopējiet to kā:

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

Jūs varat rediģēt to, izmantojot izvēlēto redaktoru kā:

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

Un izdzēsiet to kā:

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

Lai izdzēstu visus failus, kuru faila nosaukumā ir hash (#), varat izmantot:

 # rm ./#*

Darbs ar failiem, kuru nosaukumā ir semikols (;)

Ja nezināt, semikols darbojas kā komandu atdalītājs BASH un, iespējams, arī citā čaulā. Semikols ļauj izpildīt vairākas komandas vienā piegājienā un darbojas kā atdalītājs. Vai esat kādreiz saskārušies ar kādu faila nosaukumu, kurā ir semikols? Ja nē, šeit jūs to darīsit.

Izveidojiet failu, kurā ir semikols.

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

Iepriekš minētās kļūdas iemesls ir tas, ka, palaižot iepriekšminēto komandu, BASH pieskārienu interpretē kā komandu, bet pirms semikola nevarēja atrast nevienu faila operandu, un tāpēc tas ziņo par kļūdu. Tas arī ziņo par vēl vienu kļūdu, kuru ‘abc.txt’ komanda nav atrasta, tikai tāpēc, ka pēc semikola BASH gaidīja citu komandu un ‘abc.txt’, tā nav komanda.

Lai novērstu šādu kļūdu, pasakiet BASH, ka semikols netiek interpretēts kā komandu atdalītājs kā:

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

Piezīme. Mēs pievienojām faila nosaukumu ar vienu pēdiņu . Tas BASH saka, ka ; ir faila nosaukuma daļa, nevis komandu atdalītājs.

Pārējo darbību (t.i., kopēšanu, pārvietošanu, dzēšanu) failā un mapē, kuras nosaukums ir semikols, var veikt tieši uz priekšu, iekļaujot vārdu vienā pēdiņā.

Darbs ar citām īpašajām rakstzīmēm faila/mapes nosaukumā

Neprasa neko citu, vienkārši dariet to parastajā veidā, tik vienkāršu faila nosaukumu, kā parādīts zemāk.

$ touch +12.txt 

Faila nosaukums jāpievieno vienā pēdiņā, kā mēs to darījām ar semikolu. Pārējās lietas ir taisni uz priekšu ..

$ touch '$12.txt'

Jums nekas nav jādara citādi, uzskatiet to par parastu failu.

$ touch %12.txt

Ja faila nosaukumā ir zvaigznīte, nekas nemainās, un jūs varat turpināt to izmantot kā parasto failu.

$ touch *12.txt

Piezīme. Ja jums ir jāizdzēš fails, kas sākas ar * , nekad neizmantojiet šādas komandas, lai izdzēstu šādus failus.

$ rm *
or
$ rm -rf *

Tā vietā izmantojiet,

$ rm ./*.txt

Vienkārši pievienojiet faila nosaukumu vienā citātā, un pārējās lietas ir vienādas.

$ touch '!12.txt'

Nekas papildus, rīkojieties ar faila nosaukumu, kam At Sign ir kā nefrāāls fails.

$ touch '@12.txt'

Nav nepieciešama papildu uzmanība. Izmantojiet failu ar ^ faila nosaukumā kā parasto failu.

$ touch ^12.txt

Faila nosaukums ir jāpievieno atsevišķās pēdiņās, un jūs esat gatavs doties.

$ touch '&12.txt'

Ja faila nosaukumam ir iekavas, faila nosaukums jāpievieno ar pēdiņām.

$ touch '(12.txt)'

Nav nepieciešama papildu aprūpe. Vienkārši izturieties pret to kā pret citu failu.

$ touch {12.txt}

Faila nosaukumam ar Chevrons jābūt pievienotam pēdiņās.

$ touch '<12.txt>'

Apstrādājiet faila nosaukumu ar kvadrātiekavām kā parastiem failiem, un jums tas nav īpaši jārūpējas.

$ touch [12.txt]

Tie ir ļoti izplatīti un neprasa neko citu. Vienkārši dariet to, ko jūs būtu darījis ar parasto failu.

$ touch _12.txt

Ja jums ir vienāds ar zīmi, tas neko nemaina, jūs varat to izmantot kā parasto failu.

$ touch =12.txt

Backslash liek čaulai ignorēt nākamo rakstzīmi. Faila nosaukums jāpievieno vienā pēdiņā, kā mēs to darījām ar semikolu. Pārējās lietas ir tieši uz priekšu.

$ touch '.txt'

Kamēr jūsu failu sistēmā nav kļūdu, nevar izveidot failu, kura nosaukumā ir slīpsvītra (/) . Nekādi nevar izvairīties no slīpsvītras uz priekšu.

Tātad, ja jūs varat izveidot tādu failu kā ‘/12.txt’ vai ‘b/c.txt’, vai nu jūsu failu sistēmā ir kļūda, vai arī jums ir Unicode atbalsts, kas ļauj jums izveidot failu ar slīpsvītru uz priekšu. Šajā gadījumā slīpsvītra uz priekšu nav īsta slīpsvītra uz priekšu, bet gan Unicode rakstzīme, kas izskatās vienādi ar slīpsvītru uz priekšu.

Atkal piemērs, kurā jums nav jāveic īpaši mēģinājumi. Faila nosaukumu, kuram ir jautājuma zīme, var apstrādāt visplašāk.

$ touch ?12.txt

Faili, kas sākas ar dot (.) , Linux sistēmā ir ļoti īpaši, un tos sauc par dot failiem. Tie ir slēpti faili, parasti konfigurācijas vai sistēmas faili. Lai skatītu šādus failus, jums jāizmanto slēdzis ‘-a’ vai ‘-A’ ar komandu ls.

Šādu failu izveidošana, rediģēšana, pārdēvēšana un dzēšana ir vienkārša.

$ touch .12.txt

Piezīme: Linux operētājsistēmā faila nosaukumā var būt tik daudz punktu (.) , cik nepieciešams. Atšķirībā no citiem sistēmas punktiem faila nosaukumā nenozīmē atdalīt vārdu un paplašinājumu. Failu ar vairākiem punktiem var izveidot šādi:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

un pārbaudiet to kā:

$ 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

Faila nosaukumā var būt komats, cik vien vēlaties, un jums nekas cits nav vajadzīgs. Vienkārši dariet to kā parasti, kā vienkāršu faila nosaukumu.

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

Faila nosaukumā var būt resnās zarnas, cik vien vēlaties, un jums nekas cits nav vajadzīgs. Vienkārši dariet to kā parasti, kā vienkāršu faila nosaukumu.

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

Lai faila nosaukumā būtu pēdiņas, mums jāizmanto apmaiņas kārtula. T.i., ja faila nosaukumā ir jābūt vienai pēdiņai, pievienojiet faila nosaukumu ar divkāršām pēdiņām un, ja faila nosaukumā ir nepieciešama dubultā pēdiņa, pievienojiet to ar vienu pēdiņu.

$ touch "15'.txt"

and

$ touch '15”.txt'

Daži Linux redaktori, piemēram, emacs, izveido rediģējamā faila dublējuma failu. Rezerves failam faila nosaukuma beigās ir sākotnējā faila nosaukums un tilde. Jums var būt fails, kura nosaukumā ir tilde, jebkurā vietā vienkārši šādi:

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

Izveidojiet failu, kura nosaukumā ir atstarpe starp rakstzīmi/vārdu, sakiet “čau, mans vārds ir avishek.txt”.

Nav laba ideja, ja faila nosaukums ir ar atstarpēm, un, ja jums ir jānošķir lasāms nosaukums, jums vajadzētu izmantot, pasvītrot vai svītri. Tomēr, ja jums ir jāizveido šāds fails, jums jāizmanto slīpsvītra, kas ignorē nākamo tā rakstzīmi. Lai izveidotu iepriekš minēto failu, tas jādara šādā veidā ..

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

hi my name is avishek.txt

Esmu mēģinājis aptvert visu scenāriju, ar kuru jūs varētu saskarties. Lielākā daļa iepriekš minēto ieviešanu ir tieši paredzēta BASH Shell un var nedarboties citā apvalkā.

Ja jums šķiet, ka man kaut kas pietrūka (tas ir ļoti izplatīts un cilvēka raksturs), jūs varat iekļaut savu ieteikumu zemāk esošajos komentāros. Uzturiet savienojumu, turpiniet komentēt. Sekojiet līdzi un sazinieties! Patīk un dalieties ar mums, kā arī palīdziet mums izplatīties!