Kuidas manipuleerida failinimedega, millel on Linuxis tühikud ja erimärgid
Failide ja kaustade nimedega puutume kokku väga regulaarselt. Enamasti on faili/kausta nimi seotud faili/kausta sisuga ning algab numbri ja märkidega. Tähtnumbriline failinimi on üsna levinud ja väga laialt kasutatav, kuid see pole nii, kui peame tegelema faili/kausta nimega, milles on erimärgid.
Märkus. Meil võib olla mis tahes tüüpi faile, kuid lihtsuse ja lihtsa rakendamise huvides käsitleme kogu artiklis tekstifaili (.txt).
Kõige tavalisemate failinimede näited on järgmised:
abc.txt avi.txt debian.txt ...
Numbriliste failinimede näited on järgmised:
121.txt 3221.txt 674659.txt ...
Tähtnumbriliste failinimede näited on järgmised:
eg84235.txt 3kf43nl2.txt 2323ddw.txt ...
Näited failinimedest, millel on erimärk ja mis pole eriti levinud:
#232.txt #bkf.txt #bjsd3469.txt #121nkfd.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.txt ...
Üks kõige ilmsem küsimus on siin - kes maa peal loob/tegeleb failide/kaustade nimega, millel on räsi (#)
, semikoolon (;)
, kriips (-)
või mõni muu erimärk.
Nõustun teiega, et sellised failinimed pole levinud, kuid teie shell ei tohiks katki minna/loobuda, kui peate selliste failinimedega tegelema. Ka tehniliselt rääkides käsitletakse Linuxis failidena faile, olgu see siis kaust, draiver või muu.
Failiga tegelemine, mille nimes on kriips (-)
Looge fail, mis algab kriipsuga (-)
, öelge -abx.txt.
$ touch -abc.txt
touch: invalid option -- 'b' Try 'touch --help' for more information.
Eespool toodud vea põhjuseks on see, et shell tõlgendab pärast kriipsu (-)
kõike valikuna ja ilmselgelt sellist võimalust pole, seega on see viga.
Sellise vea lahendamiseks peame ütlema Bashi kestale (see ja enamik teisi näiteid artiklis on mõeldud BASH-ile), et mitte tõlgendada midagi erimärgi (siin kriips) järel.
Selle tõrke lahendamiseks on kaks võimalust:
$ touch -- -abc.txt [Option #1] $ touch ./-abc.txt [Option #2]
Nii loodud faili saate kontrollida mõlemal ülaltoodud viisil, käivitades pika loendi jaoks käsud ls või ls -l.
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt
Ülaltoodud faili muutmiseks võite teha järgmist.
$ nano -- -abc.txt or $ nano ./-abc.txt
Märkus. Võite nano asendada mis tahes muu valitud redaktoriga, öelge vim järgmiselt:
$ vim -- -abc.txt or $ vim ./-abc.txt
Samamoodi peate sellise faili teisaldamiseks tegema järgmist.
$ mv -- -abc.txt -a.txt or $ mv -- -a.txt -abc.txt
ja selle faili kustutamiseks peate tegema järgmist.
$ rm -- -abc.txt or $ rm ./-abc.txt
Kui teil on kaustas, mille nimi sisaldab kriipsu, palju faile ja soovite need kõik korraga kustutada, tehke järgmist.
$ rm ./-*
1. Faili nimel olevate suvaliste arvude ja nende esinemise kohta järgitakse sama reeglit, mida eespool arutati. Viz., -A-b-c.txt, ab-c.txt, abc-.txt jne.
2. Eespool käsitletud reegel kehtib suvalise arvu sidekohtadega kausta nime ja esinemise kohta, välja arvatud asjaolu, et kausta kustutamiseks peate kasutama rm -rf:
$ rm -rf -- -abc or $ rm -rf ./-abc
Failidega tegelemine, mille nimes on HASH (#)
Sümbolil #
on BASH-is väga erinev tähendus. Kõiki #
taga olevaid asju tõlgendatakse kommentaaridena ja seetõttu jätab BASH selle tähelepanuta.
looge fail # abc.txt.
$ touch #abc.txt
touch: missing file operand Try 'touch --help' for more information.
Eespool toodud vea põhjus on see, et Bash tõlgendab # abc.txt kommentaari ja ignoreerib seda. Nii et käsk touch on edastatud ilma faili Operandita ja seega on see viga.
Sellise vea lahendamiseks võite paluda BASHil mitte tõlgendada # kommentaarina.
$ touch ./#abc.txt or $ touch '#abc.txt'
ja kontrollige äsja loodud faili järgmiselt:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt
Nüüd looge fail, mille nimi sisaldab #
kõikjal, välja arvatud kerjamisel.
$ touch ./a#bc.txt $ touch ./abc#.txt or $ touch 'a#bc.txt' $ touch 'abc#.txt'
Selle kontrollimiseks käivitage ‘ls -l’:
$ 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
Mis juhtub, kui loote korraga kaks faili (ütleme a ja #bc):
$ touch a.txt #bc.txt
Kontrollige äsja loodud faili:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt
Ülaltoodud näite põhjal on ilmselge, et see lõi ainult faili a ja faili #bc on ignoreeritud. Eespool nimetatud olukorra edukaks täitmiseks saame seda teha,
$ touch a.txt ./#bc.txt or $ touch a.txt '#bc.txt'
ja kontrollige seda järgmiselt:
$ 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
Faili saate teisaldada järgmiselt:
$ mv ./#bc.txt ./#cd.txt or $ mv '#bc.txt' '#cd.txt'
Kopeerige see järgmiselt:
$ cp ./#cd.txt ./#de.txt or $ cp '#cd.txt' '#de.txt'
Võite seda redigeerida nii, et kasutate valitud redaktorit järgmiselt:
$ vi ./#cd.txt or $ vi '#cd.txt'
$ nano ./#cd.txt or $ nano '#cd.txt'
Ja kustutage see järgmiselt:
$ rm ./#bc.txt or $ rm '#bc.txt'
Kõigi failide kustutamiseks, mille failinimes on räsi (#), võite kasutada järgmist.
# rm ./#*
Failidega tegelemine, mille nimes on semikoolon (;)
Kui te pole sellest teadlik, toimib semikoolon BASH-is käsueraldajana ja võib-olla ka muus shellis. Semikoolon võimaldab teil korraga täita mitu käsku ja toimib eraldajana. Kas olete kunagi tegelenud mõne failinimega, kus on semikoolon? Kui ei, siis siin.
Looge fail, milles on semikoolon.
$ touch ;abc.txt
touch: missing file operand Try 'touch --help' for more information. bash: abc.txt: command not found
Eeltoodud tõrke põhjuseks on see, et kui käivitate ülaltoodud käsu, tõlgendab BASH puutetundlikkust käsuna, kuid ei leidnud enne semikooloni ühtegi faili operandi ja seega teatab see veast. Samuti teatatakse teisest veast, mida käsku 'abc.txt' ei leitud, vaid seetõttu, et pärast semikoolonit ei oodanud BASH veel üht käsku ja 'abc.txt'.
Sellise tõrke lahendamiseks öelge BASH-il, et ta ei tõlgenda semikoolonit käskude eraldajana järgmiselt:
$ touch ./';abc.txt' or $ touch ';abc.txt'
Märkus. Oleme failinime lisanud ühe jutumärgiga
. See ütleb BASH-ile, et ;
on failinime osa, mitte käskude eraldaja.
Ülejäänud toimingu (st kopeerimine, teisaldamine, kustutamine) failis ja kaustas, mille nimi on semikoolon, saab teha otse, lisades nime ühte jutumärki.
Muude erimärkide käsitlemine faili/kausta nimes
Ära vaja midagi täiendavat, lihtsalt tehke seda tavalisel viisil, nii lihtsa failinimega, nagu allpool näidatud.
$ touch +12.txt
Failinimi tuleb lisada ühe jutumärgiga, nagu tegime semikooloniga. Ülejäänud asjad on otse edasi ..
$ touch '$12.txt'
Teil pole vaja midagi muud teha, käsitlege seda tavalise failina.
$ touch %12.txt
Tärniga failinimes muutmine ei muuda midagi ja saate seda jätkata tavalise failina.
$ touch *12.txt
Märkus. Kui peate kustutama faili, mis algab tähega *
, ärge kunagi kasutage selliste failide kustutamiseks järgmisi käske.
$ rm * or $ rm -rf *
Selle asemel kasutage
$ rm ./*.txt
Lihtsalt lisage failinimi ühte jutumärki ja ülejäänud asjad on samad.
$ touch '!12.txt'
Midagi ekstra, käsitlege failinime, millel At Sign on mitteoluline fail.
$ touch '@12.txt'
Lisatähelepanu pole vaja. Kasutage faili, mille failinimes on ^
tavalise failina.
$ touch ^12.txt
Failinimi peaks olema suletud üksikutesse jutumärkidesse ja olete valmis minema.
$ touch '&12.txt'
Kui failinimel on sulg, peate failinime lisama üksikute jutumärkidega.
$ touch '(12.txt)'
Lisahooldust pole vaja. Käsitlege seda lihtsalt teise failina.
$ touch {12.txt}
Chevronitega failinimi tuleb lisada jutumärkidesse.
$ touch '<12.txt>'
Käsitlege nurksulgudega failinime tavaliste failidena ja te ei pea selle eest eriti hoolt kandma.
$ touch [12.txt]
Need on väga levinud ja ei vaja midagi täiendavat. Lihtsalt tehke seda, mida oleksite teinud tavalise failiga.
$ touch _12.txt
Kui teil on võrdusmärk, ei muuda see midagi, saate seda kasutada tavalise failina.
$ touch =12.txt
Backslash käsib shellil järgmist märki ignoreerida. Failinimi tuleb lisada ühe jutumärgiga, nagu tegime semikooloniga. Ülejäänud asjad on otse edasi.
$ touch '.txt'
Enne kui failisüsteemis on viga, ei saa luua faili, mille nimi sisaldab ka kaldkriipsu (/)
. Kaldkriipsust ei pääse kuidagi.
Nii et kui saate luua sellise faili nagu '/12.txt' või 'b/c.txt', siis kas teie failisüsteemis on viga või teil on Unicode'i tugi, mis võimaldab teil luua kaldkriipsuga faili. Sel juhul ei ole ettepoole suunatud kaldkriips päris tegelik ettepoole suunatud kaldkriips, vaid Unicode'i märk, mis näeb välja sarnane kaldkriips.
Jällegi näide, kus teil pole vaja erilisi katseid teha. Küsimärgiga failinime saab käsitleda kõige üldisemalt.
$ touch ?12.txt
Punktiga (.)
algavad failid on Linuxis väga erilised ja neid nimetatakse punktfailideks. Need on peidetud failid, tavaliselt konfiguratsiooni- või süsteemifailid. Selliste failide vaatamiseks peate kasutama ls-ga käsku '-a' või '-A'.
Selliste failide loomine, muutmine, ümbernimetamine ja kustutamine on lihtne.
$ touch .12.txt
Märkus: Linuxis võib teil olla nii palju punkte (.)
kui vajate failinimes. Erinevalt teistest failinime süsteemipunktidest ei tähenda see nime ja laiendi eraldamist. Mitme punktiga faili saate luua järgmiselt:
$ touch 1.2.3.4.5.6.7.8.9.10.txt
ja kontrollige seda järgmiselt:
$ 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
Failinimes võib olla koma nii palju kui soovite ja te ei vaja midagi täiendavat. Lihtsalt tehke seda tavalisel viisil, lihtsa failinimena.
$ touch ,12.txt or $ touch ,12,.txt
Failinimes võib olla koolon, nii palju kui soovite, ja te ei vaja midagi täiendavat. Lihtsalt tehke seda tavalisel viisil, lihtsa failinimena.
$ touch :12.txt or $ touch :12:.txt
Tsitaatide pakkumiseks failinimes peame kasutama vahetuse reeglit. St kui teil on failinimes vaja ühte pakkumist, lisage failinimi topeltpakkumistega ja kui teil on vaja topeltpakkumisi failinimes, lisage see ühe jutumärgiga.
$ touch "15'.txt" and $ touch '15”.txt'
Mõned Linuxi redaktorid, näiteks emacs, loovad redigeeritava faili varukoopia. Varukoopiafailil on algse faili nimi pluss faili nime lõpus tilde. Teil võib olla fail, mille nimi sisaldab tildet, mis tahes kohas lihtsalt järgmiselt:
$ touch ~1a.txt or $touch 2b~.txt
Looge fail, mille nimel on märgi/sõna vahel ruumi, öelge\"tere, mu nimi on avishek.txt".
Ei ole hea, kui failinimel on tühikud ja kui peate eristama loetavat nime, peaksite seda kasutama, alla kriipsutama või kriipsuga. Kuid kui peate sellise faili looma, peate kasutama tahapoole kaldkriipsu, mis ignoreerib selle järgmist märki. Ülaloleva faili loomiseks peame seda tegema nii.
$ touch hi\ my\ name\ is\ avishek.txt hi my name is avishek.txt
Olen proovinud kajastada kõiki stsenaariume, millega võite kokku puutuda. Enamik ülaltoodud rakendusi on selgesõnaliselt BASH Shelli jaoks ja ei pruugi mõnes teises kestas töötada.
Kui tunnete, et mul jäi millestki puudu (see on väga levinud ja inimlik loomus), võite lisada oma soovituse allpool toodud kommentaaridesse. Hoidke ühendust, jätkake kommenteerimist. Püsige lainel ja ühenduses! Meeldib ja jaga meid ning aita meil levida!