Kako upravljati z imeni datotek s presledki in posebnimi znaki v Linuxu


Zelo redno naletimo na imena datotek in map. V večini primerov je ime datoteke/mape povezano z vsebino datoteke/mape in se začne s številko in znaki. Črkovno-številčna imena datotek so precej pogosta in zelo pogosto uporabljena, vendar to ne velja, ko imamo opravka z imenom datoteke/mape, ki vsebuje posebne znake.

Opomba: Lahko imamo datoteke katere koli vrste, vendar bomo zaradi enostavnosti in enostavne izvedbe v celotnem članku obravnavali besedilno datoteko (.txt).

Primer najpogostejših imen datotek so:

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

Primeri numeričnih imen datotek so:

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

Primeri alfanumeričnih imen datotek so:

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

Primeri imen datotek, ki imajo poseben značaj in niso zelo pogosti:

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

Eno najočitnejših vprašanj tukaj je - kdo na svetu ustvarja/obravnava ime datotek/map s Hash (#) , podpičjem (;) , pomišljaj (-) ali kateri koli drug poseben znak.

Strinjam se z vami, da taka imena datotek niso pogosta, vendar se vaša lupina ne bi smela zlomiti/odreči, ko boste imeli opravka s takšnimi imeni datotek. Tudi tehnično gledano se vsaka stvar, bodisi mapa, gonilnik ali karkoli drugega, v Linuxu obravnava kot datoteka.

Ukvarjanje z datoteko, v kateri je pomišljaj (-)

Ustvarite datoteko, ki se začne s pomišljajem (-) , recimo -abx.txt.

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

Razlog za zgornjo napako je v tem, da lupina karkoli po pomišljaju (-) razlaga kot možnost in očitno te možnosti ni, zato je napaka.

Da bi odpravili takšno napako, moramo ukazni lupini Bash (da, ta in večina drugih primerov v članku je namenjena BASH-u), da ne razlaga ničesar po posebnem znaku (tukaj pomišljaj), kot možnost.

To napako lahko rešite na dva načina:

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

Tako ustvarjeno datoteko lahko preverite na oba zgornja načina z zagonom ukazov ls ali ls -l za daljši seznam.

$ ls -l

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

Če želite urediti zgornjo datoteko, lahko naredite:

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

Opomba: Lahko zamenjate nano z drugim urejevalnikom po vaši izbiri, recimo vim kot:

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

Podobno za premikanje takšne datoteke morate storiti:

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

in če želite izbrisati to datoteko, morate narediti:

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

Če imate v mapi veliko datotek, katerih ime vsebuje pomišljaj, in jih želite hkrati izbrisati, naredite naslednje:

$ rm ./-*

1. Enako pravilo, kot je bilo obravnavano zgoraj, velja za poljubno število hipenov v imenu datoteke in njihovo pojavitev. Viz., -A-b-c.txt, ab-c.txt, abc-.txt itd.

2. Za ime mape s poljubnim številom hipenov in njihovo pojavnostjo velja isto pravilo, kot je razloženo zgoraj, razen dejstva, da morate za brisanje mape uporabiti 'rm -rf' kot:

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

Ukvarjanje z datotekami, ki imajo v imenu HASH (#)

Simbol # ima v jeziku BASH zelo drugačen pomen. Karkoli po # se razlaga kot komentar in zato BASH zanemarja.

ustvarite datoteko # abc.txt.

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

Razlog za zgornjo napako je, da Bash interpretira # abc.txt komentar in s tem ignorira. Torej je bil ukaz dotičen brez datoteke Operand, zato je napaka.

Če želite odpraviti takšno napako, lahko prosite BASH, naj # ne razlaga kot komentar.

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

in preverite pravkar ustvarjeno datoteko kot:

$ ls -l

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

Zdaj ustvarite datoteko, katere ime vsebuje # kjer koli, razen na prošnji.

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

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

Zaženite 'ls -l', da to preverite:

$ 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

Kaj se zgodi, ko hkrati ustvarite dve datoteki (recimo a in #bc):

$ touch a.txt #bc.txt

Preverite pravkar ustvarjeno datoteko:

$ ls -l

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

Iz zgornjega primera je razvidno, da je ustvarila samo datoteko 'a', datoteka '#bc' pa je bila prezrta. Za uspešno izvedbo zgornje situacije lahko storimo,

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

in ga preverite kot:

$ 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

Datoteko lahko premaknete kot:

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

Kopirajte kot:

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

Lahko ga uredite tako, da uporabite urejevalnik, ki ste ga izbrali, kot:

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

In ga izbrišite kot:

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

Če želite izbrisati vse datoteke, ki imajo v imenu datoteke zgoščeno (#), lahko uporabite:

 # rm ./#*

Ukvarjanje z datotekami, v katerih je podpičje (;)

Če niste seznanjeni, podpičje deluje kot ločilo ukazov v BASH in morda tudi v drugi lupini. Podpičje vam omogoča, da naenkrat izvedete več ukazov in deluje kot ločilo. Ste se že kdaj srečali s katerim koli imenom datoteke, v katerem je podpičje? Če ne, boste tukaj.

Ustvarite datoteko, v kateri je podpičje.

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

Razlog za zgornjo napako je ta, da pri zagonu zgornjega ukaza BASH dotik razlaga kot ukaz, vendar pred podpičjem ni mogel najti nobenega operanda datoteke in s tem poroča o napaki. Poroča tudi o drugi napaki, da ukaza 'abc.txt' ni mogoče najti, samo ker po podpičju BASH ni pričakoval drugega ukaza in 'abc.txt'.

Če želite odpraviti takšno napako, povejte BASH, naj podpičja ne razlaga kot ločilo ukazov kot:

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

Opomba: Ime datoteke smo priložili z enim narekovajem . BASH-u pove, da je ; del imena datoteke in ne ločilo ukazov.

Preostanek dejanja (tj. Kopiranje, premikanje, brisanje) v datoteki in mapi, ki ima v imenu podpičje, lahko izvedete tako, da ime zaprete v en narekovaj.

Ukvarjanje z drugimi posebnimi znaki v imenu datoteke/mape

Ne zahteva ničesar dodatnega, samo navadno, kot preprosto ime datoteke, kot je prikazano spodaj.

$ touch +12.txt 

Ime datoteke morate priložiti z enim narekovajem, kot smo storili v podpičju. Ostale stvari so naravnost naprej ..

$ touch '$12.txt'

Nič vam ni treba storiti drugače, to obravnavajte kot običajno datoteko.

$ touch %12.txt

Z zvezdico v imenu datoteke se nič ne spremeni in jo lahko še naprej uporabljate kot običajno datoteko.

$ touch *12.txt

Opomba: Ko morate izbrisati datoteko, ki se začne z * , nikoli ne uporabljajte naslednjih ukazov za brisanje takih datotek.

$ rm *
or
$ rm -rf *

Namesto tega uporabite

$ rm ./*.txt

Samo ime datoteke zaprite z enim narekovajem, ostale stvari pa so enake.

$ touch '!12.txt'

Nič posebnega, ime datoteke, ki ima At Sign, obravnavajte kot nenavadno datoteko.

$ touch '@12.txt'

Dodatna pozornost ni potrebna. Uporabite datoteko, ki ima v imenu ^ kot običajno datoteko.

$ touch ^12.txt

Ime datoteke mora biti v enojnih narekovajih in že ste pripravljeni.

$ touch '&12.txt'

Če ima ime datoteke oklepaje, morate ime datoteke priložiti z enojnimi narekovaji.

$ touch '(12.txt)'

Dodatna nega ni potrebna. Samo obravnavajte ga kot samo še eno datoteko.

$ touch {12.txt}

Ime datoteke s ševroni mora biti v enojnih narekovajih.

$ touch '<12.txt>'

Ime datoteke s kvadratnimi oklepaji obravnavajte kot običajno datoteko in zanjo vam ni treba posebej skrbeti.

$ touch [12.txt]

So zelo pogosti in ne zahtevajo ničesar dodatnega. Naredite samo tisto, kar bi storili z običajno datoteko.

$ touch _12.txt

Če imate znak Enako za nič, ne spremenite ničesar, lahko ga uporabite kot običajno datoteko.

$ touch =12.txt

Povratna poševnica pove lupini, naj prezre naslednji znak. Ime datoteke morate priložiti z enim narekovajem, kot smo storili v podpičju. Preostale stvari so naravnost naprej.

$ touch '.txt'

Ne morete ustvariti datoteke, katere ime vključuje poševnico (/) , dokler vaš datotečni sistem ne odstrani napake. Pred poševnico naprej se nikakor ne moremo izogniti.

Torej, če lahko ustvarite datoteko, kot je ‘/12.txt’ ali ‘b/c.txt’, potem ima vaš datotečni sistem napako ali pa imate podporo za Unicode, ki omogoča ustvarjanje datoteke s poševnico naprej. V tem primeru poševnica naprej ni prava poševnica, ampak znak Unicode, ki je podoben poševnici naprej.

Spet primer, ko vam ni treba posebej poskusiti. Ime datoteke z vprašajem je mogoče obravnavati na najbolj splošen način.

$ touch ?12.txt

Datoteke, ki se začnejo s piko (.) , so v Linuxu zelo posebne in se imenujejo datoteke s pikami. Gre za skrite datoteke, ki so običajno konfiguracijske ali sistemske. Za ogled takšnih datotek morate uporabiti stikalo '-a' ali '-A' z ukazom ls.

Ustvarjanje, urejanje, preimenovanje in brisanje takih datotek je enostavno.

$ touch .12.txt

Opomba: V Linuxu imate lahko v imenu datoteke toliko pik (.) , kot jih potrebujete. Za razliko od drugih sistemskih pik v imenu datoteke ne pomeni ločevanja imena in končnice. Datoteko z več pikami lahko ustvarite kot:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

in preverite kot:

$ 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

V imenu datoteke lahko imate vejico, kolikor želite, in ne potrebujete ničesar dodatnega. Naredite to običajno, kot preprosto ime datoteke.

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

V imenu datoteke lahko imate dvopičje, kolikor želite, in ne potrebujete ničesar dodatnega. Naredite to običajno, kot preprosto ime datoteke.

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

Če želimo imeti narekovaje v imenu datoteke, moramo uporabiti pravilo menjave. Tj. Če morate v imenu datoteke imeti en narekovaj, ime datoteke priložite z dvojnimi narekovaji, če pa morate v imenu datoteke imeti dvojni narekovaj, pa z enim narekovajem.

$ touch "15'.txt"

and

$ touch '15”.txt'

Nekateri urejevalniki v Linuxu, kot je emacs, ustvarijo varnostno kopijo datoteke, ki jo urejate. Datoteka varnostne kopije ima ime izvirne datoteke in tildo na koncu imena datoteke. Datoteko, katere ime vključuje tildo, lahko imate na katerem koli mestu preprosto kot:

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

Ustvarite datoteko, katere ime ima presledek med znakom/besedo, recite\"živjo, moje ime je avishek.txt".

Ni dobro imeti imena datotek s presledki in če morate ločiti berljivo ime, uporabite, podčrtaj ali pomišljaj. Če pa morate ustvariti takšno datoteko, morate uporabiti poševnico nazaj, ki prezre naslednji znak v njej. Če želite ustvariti zgornjo datoteko, moramo to narediti na ta način ..

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

hi my name is avishek.txt

Poskušal sem zajeti vse možne scenarije. Večina zgornje izvedbe je izrecno namenjena BASH Shell in morda ne bo delovala v drugi lupini.

Če menite, da sem kaj zamudil (to je zelo pogosta in človeška narava), lahko svoj predlog vključite v spodnje komentarje. Bodite povezani, še naprej komentirajte. Ostanite z nami in povezani! Všečkajte nas in delite z nami ter nam pomagajte, da se širimo!