Kuinka manipuloida tiedostonimiä, joissa on välilyöntejä ja erikoismerkkejä Linuxissa


Tapaamme tiedostojen ja kansioiden nimen hyvin säännöllisesti. Useimmissa tapauksissa tiedoston/kansion nimi liittyy tiedoston/kansion sisältöön ja alkaa numerolla ja merkeillä. Aakkosnumeerinen tiedostonimi on melko yleinen ja sitä käytetään hyvin laajalti, mutta näin ei ole, kun meidän on käsiteltävä tiedoston/kansion nimeä, jossa on erikoismerkkejä.

Huomaa: Meillä voi olla minkä tahansa tyyppisiä tiedostoja, mutta yksinkertaisuuden ja helpon toteutuksen vuoksi käsittelemme tekstitiedostoa (.txt) koko artikkelissa.

Esimerkki yleisimmistä tiedostojen nimistä ovat:

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

Esimerkki numeerisista tiedostojen nimistä ovat:

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

Esimerkki aakkosnumeerisista tiedostojen nimistä ovat:

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

Esimerkkejä tiedostojen nimistä, joilla on erikoismerkki ja jotka eivät ole kovin yleisiä:

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

Yksi ilmeisimmistä kysymyksistä on - kuka maan päällä luo/käsittelee tiedostoja/kansioita, joilla on Hash (#) , puolipiste (;) , viiva (-) tai mikä tahansa muu erikoismerkki.

Olen kanssasi samaa mieltä siitä, että tällaiset tiedostonimet eivät ole yleisiä, silti sinun ei pitäisi hajota/luopua, kun sinun on käsiteltävä tällaisia tiedostonimiä. Myös teknisesti puhuminen jokainen asia, olipa se kansio, ohjain tai mikä tahansa muu, käsitellään tiedostona Linuxissa.

Käsitellään tiedostoa, jonka nimessä on viiva (-)

Luo tiedosto, joka alkaa viivalla (-) , sano -abx.txt.

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

Yllä olevan virheen syy, että kuori tulkitsee kaiken viivan (-) jälkeen vaihtoehtona, eikä tällaista vaihtoehtoa ilmeisesti ole, joten virhe on.

Tällaisen virheen ratkaisemiseksi meidän on kerrottava Bash-kuorelle (yup tämä ja suurin osa muista artikkelin esimerkeistä on BASH) ei tulkita mitään erikoismerkin (tässä viiva) jälkeen vaihtoehtona.

Voit korjata tämän virheen kahdella tavalla:

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

Voit vahvistaa näin luodun tiedoston molemmilla yllä olevilla tavoilla suorittamalla komennot ls tai ls -l pitkiä luetteloita varten.

$ ls -l

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

Voit muokata yllä olevaa tiedostoa seuraavasti:

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

Huomaa: Voit korvata nanon millä tahansa muulla valitsemallasi editorilla sanomalla vim:

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

Vastaavasti tällaisen tiedoston siirtämiseksi sinun on tehtävä:

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

ja poistaaksesi tämän tiedoston, sinun on tehtävä:

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

Jos sinulla on paljon tiedostoja kansiossa, jonka nimi sisältää viivan, ja haluat poistaa ne kaikki kerralla, toimi seuraavasti:

$ rm ./-*

1. Sama sääntö, josta edellä on keskusteltu, seuraa mitä tahansa tiedostomäärän hyppyjä ja niiden esiintymistä. Viz., -A-b-c.txt, ab-c.txt, abc-.txt jne.

2. Sama sääntö kuin yllä on kuvattu kansion nimelle, jolla on mikä tahansa määrä hyppyjä, ja niiden esiintyminen, paitsi että kansion poistamiseen on käytettävä ”rm -rf”:

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

Käsitellään tiedostoja, joiden nimessä on HASH (#)

Symbolilla # on hyvin erilainen merkitys BASH: ssa. Kaikki # -kohdan jälkeen tulkitaan kommenttina, joten BASH jättää sen huomiotta.

luo tiedosto # abc.txt.

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

Yllä olevan virheen syy, että Bash tulkitsee # abc.txt kommentin ja jättää siten huomiotta. Joten komentokosketus on siirretty ilman tiedostojen Operandia, ja näin ollen virhe.

Tällaisen virheen korjaamiseksi voit pyytää BASHia olemaan tulkitsematta # kommenttina.

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

ja tarkista juuri luotu tiedosto nimellä:

$ ls -l

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

Luo nyt tiedosto, jonka nimi sisältää # missä tahansa paitsi kerjäämisen yhteydessä.

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

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

Suorita ‘ls -l’ varmistaaksesi sen:

$ 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

Mitä tapahtuu, kun luot kaksi tiedostoa (sanotaan a ja #bc) kerralla:

$ touch a.txt #bc.txt

Tarkista juuri luotu tiedosto:

$ ls -l

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

Yllä olevasta esimerkistä on selvää, että se loi vain tiedoston 'a' ja tiedosto '#bc' on ohitettu. Suorittaaaksemme yllä mainitun tilanteen onnistuneesti,

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

ja tarkista se seuraavasti:

$ 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

Voit siirtää tiedoston seuraavasti:

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

Kopioi se nimellä:

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

Voit muokata sitä käyttämällä valitsemaasi editoria:

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

Ja poista se nimellä:

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

Voit poistaa kaikki tiedostot, joissa on hash (#) tiedostonimessä, käyttämällä:

 # rm ./#*

Käsitellään tiedostoja, joiden nimessä on puolipiste (;)

Jos et tiedä, puolipiste toimii komentoerottimena BASH: ssa ja ehkä myös muussa kuoressa. Puolipiste antaa sinun suorittaa useita komentoja kerralla ja toimii erottimena. Oletko koskaan käsitellyt tiedostojen nimiä, joissa on puolipiste? Jos ei, niin täällä.

Luo tiedosto, jossa on puolipiste.

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

Syy yllä olevaan virheeseen, että kun suoritat yllä olevan komennon, BASH tulkitsee kosketuksen komennona, mutta ei löytänyt yhtään tiedosto-operandia ennen puolipistettä ja siten se ilmoittaa virheestä. Se raportoi myös toisen virheen, jota 'abc.txt' -komentoa ei löydy, vain siksi, että puolipisteen jälkeen BASH odotti toista komentoa ja 'abc.txt', ei ole komento.

Voit korjata tällaisen virheen sanomalla BASHille, ettei se tulkitse puolipistettä komentojen erottimena seuraavasti:

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

Huomaa: Olemme liittäneet tiedostonimen yhdellä lainauksella . Se kertoo BASHille, että ; on osa tiedostonimeä eikä komentojen erotinta.

Loput toiminnoista (eli kopiointi, siirto, poisto) tiedostossa ja kansiossa, jonka nimessä on puolipiste, voidaan suorittaa suoraan eteenpäin liittämällä nimi yhteen lainaukseen.

Muiden erikoismerkkien käsittely tiedoston/kansion nimessä

Älä vaadi mitään ylimääräistä, vaan tee se normaalilla tavalla, niin yksinkertainen tiedostonimi kuin alla on esitetty.

$ touch +12.txt 

Sinun on liitettävä tiedostonimi yhteen lainaukseen, kuten teimme puolipisteen tapauksessa. Muut asiat ovat suoraan eteenpäin ..

$ touch '$12.txt'

Sinun ei tarvitse tehdä mitään eri tavalla, pidä sitä normaalina tiedostona.

$ touch %12.txt

Asteriskin käyttäminen tiedostonimessä ei muuta mitään ja voit jatkaa sen käyttöä normaalina tiedostona.

$ touch *12.txt

Huomaa: Kun joudut poistamaan tiedoston, joka alkaa * , älä koskaan käytä seuraavia komentoja tällaisten tiedostojen poistamiseen.

$ rm *
or
$ rm -rf *

Käytä sen sijaan

$ rm ./*.txt

Sulje vain tiedostonimi yhteen lainaukseen ja loput asiat ovat samat.

$ touch '!12.txt'

Ei mitään ylimääräistä, käsittele tiedostonimeä, jossa At Sign on ei-tavallinen tiedosto.

$ touch '@12.txt'

Lisähuomiota ei tarvita. Käytä tiedostoa, jonka tiedostonimessä on ^ kuin tavallinen tiedosto.

$ touch ^12.txt

Tiedostonimen tulee olla suljettu lainausmerkeissä ja olet valmis menemään.

$ touch '&12.txt'

Jos tiedostonimessä on sulkeet, sinun on liitettävä tiedostonimi yksittäisillä lainausmerkeillä.

$ touch '(12.txt)'

Lisähoitoa ei tarvita. Käsittele sitä vain yhtenä tiedostona.

$ touch {12.txt}

Chevroneja sisältävän tiedostonimen on oltava lainausmerkeissä.

$ touch '<12.txt>'

Käsittele hakasulkeilla varustettua tiedostonimeä normaalina tiedostona, eikä sinun tarvitse huolehtia siitä ylimääräisesti.

$ touch [12.txt]

Ne ovat hyvin yleisiä eivätkä vaadi mitään ylimääräistä. Tee vain mitä olisit tehnyt normaalilla tiedostolla.

$ touch _12.txt

Equal-to-merkki ei muuta mitään, voit käyttää sitä normaalina tiedostona.

$ touch =12.txt

Backslash kehottaa kuorta jättämään seuraavan merkin huomiotta. Sinun on liitettävä tiedostonimi yhteen lainaukseen, kuten teimme puolipisteen tapauksessa. Muut asiat ovat suoraan eteenpäin.

$ touch '.txt'

Et voi luoda tiedostoa, jonka nimi sisältää vinoviivan eteenpäin (/) , ennen kuin tiedostojärjestelmässäsi on virhe. Ei ole mitään keinoa paeta eteenpäin kauttaviivasta.

Joten jos pystyt luomaan tiedoston, kuten '/12.txt' tai 'b/c.txt', joko tiedostojärjestelmässäsi on virhe tai sinulla on Unicode-tuki, jonka avulla voit luoda tiedoston vinoviivalla. Tässä tapauksessa eteenpäin viiva ei ole todellinen eteenpäin kauttaviiva, vaan Unicode-merkki, joka näyttää samanlaiselta eteenpäin kauttaviivalla.

Jälleen esimerkki, jossa sinun ei tarvitse tehdä mitään erityisiä yrityksiä. Tiedostonimeä, jolla on kysymysmerkki, voidaan käsitellä yleisimmällä tavalla.

$ touch ?12.txt

Pisteellä (.) alkavat tiedostot ovat hyvin erityisiä Linuxissa ja niitä kutsutaan dot-tiedostoiksi. Ne ovat piilotiedostoja, yleensä kokoonpano- tai järjestelmätiedostoja. Sinun on käytettävä kytkimiä '-a' tai '-A' ls-komennolla tarkastellaksesi tällaisia tiedostoja.

Tällaisten tiedostojen luominen, muokkaaminen, uudelleennimeäminen ja poistaminen on helppoa.

$ touch .12.txt

Huomaa: Linuxissa sinulla voi olla niin monta pistettä (.) kuin tarvitset tiedostonimessä. Toisin kuin muut järjestelmän nimipisteet tiedostonimessä, tämä ei tarkoita nimen ja laajennuksen erottamista. Voit luoda tiedoston, jossa on useita pisteitä:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

ja tarkista se seuraavasti:

$ 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

Tiedostonimessä voi olla pilkku, niin monta kuin haluat, etkä tarvitse mitään ylimääräistä. Tee se normaalilla tavalla, yksinkertaisella tiedoston nimellä.

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

Tiedostonimessä voi olla kaksoispiste, niin monta kuin haluat, etkä tarvitse mitään ylimääräistä. Tee se normaalilla tavalla, yksinkertaisella tiedoston nimellä.

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

Saadaksesi lainauksia tiedostonimessä, meidän on käytettävä vaihtosääntöä. Toisin sanoen, jos tiedostonimessä on oltava yksi lainaus, liitä tiedostonimi kaksoislainausmerkkeihin ja jos sinun on oltava kaksoislainaus tiedostonimessä, liitä se yhdellä lainauksella.

$ touch "15'.txt"

and

$ touch '15”.txt'

Jotkut Linuxin muokkaajat, kuten emacs, luovat varmuuskopiotiedoston muokattavasta tiedostosta. Varmuuskopiotiedostossa on alkuperäisen tiedoston nimi ja tilde tiedostonimen lopussa. Sinulla voi olla tiedosto, jonka nimi sisältää tilden, missä tahansa yksinkertaisesti:

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

Luo tiedosto, jonka nimessä on tilaa merkin/sanan välillä, sano "hei, nimeni on avishek.txt".

Ei ole hyvä idea, jos tiedostonimessä on välilyöntejä, ja jos joudut erottamaan luettavan nimen, sinun on käytettävä, alleviiva tai viiva. Jos sinun on kuitenkin luotava tällainen tiedosto, sinun on käytettävä taaksepäin kauttaviivaa, joka jättää huomiotta sen seuraavan merkin. Luodaksesi yllä olevan tiedoston meidän on tehtävä se tällä tavalla ..

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

hi my name is avishek.txt

Olen yrittänyt käsitellä kaikkia tilanteita, joita saatat kohdata. Suurin osa yllä olevista toteutustavoista on nimenomaan BASH Shellille, eikä se välttämättä toimi toisessa kuoressa.

Jos sinusta tuntuu, että kaipasin jotain (mikä on hyvin yleistä ja ihmisluonteista), voit sisällyttää ehdotuksesi alla oleviin kommentteihin. Pidä yhteyttä, jatka kommentoimista. Pysy kuulolla ja yhteydessä! Tykkää ja jaa meitä ja auta meitä levittämään!