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!