S názvy souborů a složek se setkáváme velmi pravidelně. Ve většině případů název souboru/složky souvisí s obsahem souboru/složky a začíná číslem a znaky. Alfa-numerické názvy souborů jsou docela běžné a velmi široce používané, ale není tomu tak, když se musíme zabývat názvem souboru/složky, který má v sobě speciální znaky.
Poznámka :Můžeme mít soubory libovolného typu, ale pro jednoduchost a snadnou implementaci se budeme zabývat textovým souborem (.txt ), v celém článku.
Příklady nejběžnějších názvů souborů jsou:
abc.txt avi.txt debian.txt ...
Příklady číselných názvů souborů jsou:
121.txt 3221.txt 674659.txt ...
Příklady alfanumerických názvů souborů jsou:
eg84235.txt 3kf43nl2.txt 2323ddw.txt ...
Příklady názvů souborů, které mají speciální charakter a nejsou příliš běžné:
#232.txt #bkf.txt #bjsd3469.txt #121nkfd.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.txt ...
Jedna z nejzřejmějších otázek zde zní – kdo proboha vytváří/zachází s názvy souborů/složek s hash (#)
, středník (;)
, pomlčka (-)
nebo jakýkoli jiný speciální znak.
Souhlasím s vámi, že takové názvy souborů nejsou běžné, přesto by se váš shell neměl rozbít/vzdát, když se musíte vypořádat s jakýmikoli takovými názvy souborů. Technicky vzato, každá věc, ať už je to složka, ovladač nebo cokoli jiného, je v Linuxu považováno za soubor.
Zacházení se souborem, který má v názvu pomlčku (-)
Vytvořte soubor, který začíná pomlčkou (-)
, řekněte -abx.txt .
$ touch -abc.txt
Ukázkový výstup
touch: invalid option -- 'b' Try 'touch --help' for more information.
Důvodem výše uvedené chyby je, že shell interpretuje cokoli za pomlčkou (-)
, jako možnost, a samozřejmě žádná taková možnost neexistuje, proto je chyba.
Abychom takovou chybu vyřešili, musíme to říct shellu Bash (jo, tento a většina dalších příkladů v článku je pro BASH ) neinterpretovat nic za speciálním znakem (zde pomlčka), jako možnost.
Tuto chybu lze vyřešit dvěma způsoby:
$ touch -- -abc.txt [Option #1] $ touch ./-abc.txt [Option #2]
Takto vytvořený soubor můžete ověřit oběma výše uvedenými způsoby spuštěním příkazů ls nebo ls -l pro dlouhý výpis.
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt
Chcete-li upravit výše uvedený soubor, můžete:
$ nano -- -abc.txt or $ nano ./-abc.txt
Poznámka :Můžete nahradit nano s jakýmkoli jiným editorem dle vašeho výběru řekněte vim jako:
$ vim -- -abc.txt or $ vim ./-abc.txt
Podobně pro přesun takového souboru musíte udělat:
$ mv -- -abc.txt -a.txt or $ mv -- -a.txt -abc.txt
a pro smazání tohoto souboru musíte udělat:
$ rm -- -abc.txt or $ rm ./-abc.txt
Pokud máte mnoho souborů ve složce, jejíž název obsahuje pomlčku, a chcete je všechny smazat najednou, postupujte takto:
$ rm ./-*
Důležitá poznámka:
1. Stejné pravidlo, jaké bylo diskutováno výše, platí pro libovolný počet hypenů v názvu souboru a jejich výskytu. Viz., -a-b-c.txt , ab-c.txt , abc-.txt , atd.
2. Stejné pravidlo, jaké bylo diskutováno výše, platí pro název složky s libovolným počtem hypen a jejich výskytem, kromě skutečnosti, že pro smazání složky musíte použít ‘rm -rf ‘ jako:
$ rm -rf -- -abc or $ rm -rf ./-abc
Zacházení se soubory, které mají v názvu HASH (#)
Symbol #
má v BASH velmi odlišný význam. Cokoli za #
je interpretován jako komentář, a proto jej BASH zanedbává.
Pochopte to pomocí příkladů:
vytvořte soubor #abc.txt .
$ touch #abc.txt
Ukázkový výstup
touch: missing file operand Try 'touch --help' for more information.
Důvodem výše uvedené chyby je, že Bash interpretuje #abc.txt komentář a tedy ignorování. Takže příkaz touch byl předán bez jakéhokoli operandu souboru, a proto došlo k chybě.
Chcete-li takovou chybu vyřešit, můžete požádat BASH, aby neinterpretoval # jako komentář.
$ touch ./#abc.txt or $ touch '#abc.txt'
a ověřte právě vytvořený soubor jako:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt
Nyní vytvořte soubor, jehož název obsahuje #
kdekoli kromě žebrání.
$ touch ./a#bc.txt $ touch ./abc#.txt or $ touch 'a#bc.txt' $ touch 'abc#.txt'
Spusťte ‘ls -l ‘ pro ověření:
$ 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
Co se stane, když vytvoříte dva soubory (řekněme a a #bc ) najednou:
$ touch a.txt #bc.txt
Ověřte právě vytvořený soubor:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt
Z výše uvedeného příkladu je zřejmé, že vytvořil pouze soubor ‚a “ a soubor „#bc ‘ byl ignorován. Pro úspěšné provedení výše uvedené situace můžeme udělat,
$ touch a.txt ./#bc.txt or $ touch a.txt '#bc.txt'
a ověřte jej jako:
$ 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
Soubor můžete přesunout jako:
$ mv ./#bc.txt ./#cd.txt or $ mv '#bc.txt' '#cd.txt'
Zkopírujte jej jako:
$ cp ./#cd.txt ./#de.txt or $ cp '#cd.txt' '#de.txt'
Můžete jej upravit pomocí zvoleného editoru jako:
$ vi ./#cd.txt or $ vi '#cd.txt'
$ nano ./#cd.txt or $ nano '#cd.txt'
A smazat jako:
$ rm ./#bc.txt or $ rm '#bc.txt'
Chcete-li odstranit všechny soubory, které mají hash (# ) v názvu souboru můžete použít:
# rm ./#*
Zacházení se soubory, které mají ve svém názvu středník (;)
V případě, že si nejste vědomi, středník funguje jako oddělovač příkazů v BASH a možná i v jiném shellu. Středník umožňuje provést několik příkazů najednou a funguje jako oddělovač. Setkali jste se někdy s tím, že nějaký název souboru obsahuje středník? Pokud ne zde, uděláte to.
Vytvořte soubor se středníkem.
$ touch ;abc.txt
Ukázkový výstup
touch: missing file operand Try 'touch --help' for more information. bash: abc.txt: command not found
Důvodem výše uvedené chyby je, že při spuštění výše uvedeného příkazu BASH interpretujte touch jako příkaz, ale nenašel žádný souborový operand před středníkem, a proto hlásí chybu. Hlásí také další chybu „abc.txt ‘ příkaz nenalezen, pouze proto, že za středníkem BASH očekával další příkaz a ‘abc.txt ‘, není příkaz.
Chcete-li takovou chybu vyřešit, řekněte BASH, aby neinterpretoval středník jako oddělovač příkazů jako:
$ touch ./';abc.txt' or $ touch ';abc.txt'
Poznámka :Název souboru jsme uzavřeli jednoduchými uvozovkami ''
. Říká BASH, že ;
je součástí názvu souboru a ne oddělovačem příkazů.
Zbytek akce (např. kopírování, přesun, smazání) se souborem a složkou se středníkem v názvu lze provést přímo vpřed uzavřením názvu do jednoduchých uvozovek.
Zacházení s dalšími speciálními znaky v názvu souboru/složky
Znaménko plus (+) v názvu souboru
Nevyžaduje nic navíc, udělejte to normálním způsobem, jako jednoduchý název souboru, jak je uvedeno níže.
$ touch +12.txt
Znak dolaru ($) v názvu souboru
Název souboru musíte uzavřít do jednoduchých uvozovek, jako jsme to udělali v případě středníku. Zbytek věcí je přímočarý..
$ touch '$12.txt'
Procento (%) v názvu souboru
Nemusíte dělat nic jinak, zacházejte s ním jako s normálním souborem.
$ touch %12.txt
Hvězdička (*) v názvu souboru
Hvězdička v názvu souboru nic nemění a můžete jej nadále používat jako normální soubor.
$ touch *12.txt
Poznámka :Když musíte smazat soubor, který začíná *
, K odstranění takových souborů nikdy nepoužívejte následující příkazy.
$ rm * or $ rm -rf *
Místo toho použijte,
$ rm ./*.txt
Vykřičník (!) v názvu souboru
Stačí uzavřít název souboru do jednoduchých uvozovek a zbytek je stejný.
$ touch '!12.txt'
Zavináč (@) v názvu souboru
Nic extra, zacházejte se souborem s At Sign jako s normálním souborem.
$ touch '@12.txt'
^ v názvu souboru
Nevyžaduje žádnou zvláštní pozornost. Použijte soubor s ^
v souboru jako normální soubor.
$ touch ^12.txt
Ampersand (&) v názvu souboru
Název souboru by měl být uzavřen v jednoduchých uvozovkách a můžete začít.
$ touch '&12.txt'
Závorky () v názvu souboru
Pokud má název souboru závorky, musíte název souboru uzavřít do jednoduchých uvozovek.
$ touch '(12.txt)'
Složené závorky {} v názvu souboru
Není potřeba žádná zvláštní péče. Zacházejte s ním jen jako s dalším souborem.
$ touch {12.txt}
Díky <> v názvu souboru
Název souboru se šipkou musí být uzavřen v jednoduchých uvozovkách.
$ touch '<12.txt>'
Hranaté závorky [ ] v názvu souboru
S názvem souboru s hranatými závorkami zacházejte jako s normálními soubory a nemusíte se o něj nijak zvlášť starat.
$ touch [12.txt]
Pod skóre (_) v názvu souboru
Jsou velmi běžné a nevyžadují nic extra. Prostě udělejte to, co byste udělali s normálním souborem.
$ touch _12.txt
V názvu souboru se rovná (=)
Tím, že máte znaménko Equal-to, nic neměníte, můžete jej použít jako normální soubor.
$ touch =12.txt
Zacházení se zpětným lomítkem (\)
Zpětné lomítko říká shellu, aby ignoroval další znak. Název souboru musíte uzavřít do jednoduchých uvozovek, jako jsme to udělali v případě středníku. Zbytek věcí je přímočarý.
$ touch '.txt'
Zvláštní případ lomítka
Nemůžete vytvořit soubor, jehož název obsahuje lomítko (/)
, dokud váš souborový systém nemá chybu. Neexistuje způsob, jak uniknout lomítko.
Pokud tedy můžete vytvořit soubor jako ‘/12.txt‘ nebo ‘b/c.txt‘ pak buď má váš souborový systém chybu, nebo máte podporu Unicode, která vám umožní vytvořit soubor s lomítkem. V tomto případě lomítko není skutečné lomítko, ale znak Unicode, který vypadá jako lomítko.
Otazník (?) v názvu souboru
Opět příklad, kdy nemusíte provádět žádné zvláštní pokusy. S názvem souboru s otazníkem lze zacházet nejobecnějším způsobem.
$ touch ?12.txt
Značka tečky (.) v názvu souboru
Soubory začínající tečkou (.)
jsou v Linuxu velmi speciální a nazývají se tečkové soubory. Jsou to skryté soubory obecně konfigurační nebo systémové soubory. Musíte použít přepínač „-a “ nebo „-A ‘ pomocí příkazu ls k zobrazení takových souborů.
Vytváření, úpravy, přejmenování a mazání takových souborů jsou přímočaré.
$ touch .12.txt
Poznámka :V Linuxu můžete mít tolik teček (.)
jak potřebujete v názvu souboru. Na rozdíl od jiných systémových teček v názvu souboru neznamená oddělení názvu a přípony. Můžete vytvořit soubor s více tečkami jako:
$ touch 1.2.3.4.5.6.7.8.9.10.txt
a zkontrolujte to jako:
$ 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
Čárka (,) v názvu souboru
V názvu souboru můžete mít čárku, kolik chcete, a nepotřebujete nic navíc. Udělejte to normálním způsobem, jako jednoduchý název souboru.
$ touch ,12.txt or $ touch ,12,.txt
Dvojtečka (:) v názvu souboru
V názvu souboru můžete mít dvojtečku, kolik chcete, a nepotřebujete nic navíc. Udělejte to normálním způsobem, jako jednoduchý název souboru.
$ touch :12.txt or $ touch :12:.txt
Mít uvozovky (jednoduché a dvojité) v názvu souboru
Abychom měli v názvu souboru uvozovky, musíme použít pravidlo výměny. To znamená, že pokud potřebujete mít v názvu souboru jednoduché uvozovky, uzavřete název souboru do dvojitých uvozovek a pokud potřebujete mít v názvu souboru dvojité uvozovky, uzavřete jej do jednoduchých uvozovek.
$ touch "15'.txt" and $ touch '15”.txt'
Tilda (~) v názvu souboru
Některé editory v Linuxu jako emacs vytvořte záložní soubor upravovaného souboru. Záložní soubor má název původního souboru plus vlnovku na konci názvu souboru. Soubor, jehož název obsahuje vlnovku, můžete mít na libovolném místě jednoduše jako:
$ touch ~1a.txt or $touch 2b~.txt
Bílá mezera v názvu souboru
Vytvořte soubor, v jehož názvu je mezera mezi znaky/slovy, řekněte „ahoj jmenuji se avishek.txt “.
Není dobrý nápad mít název souboru s mezerami a pokud potřebujete rozlišit čitelný název, použijte podtržítko nebo pomlčku. Pokud však musíte takový soubor vytvořit, musíte použít zpětné lomítko, které ignoruje další znak v něm. Chcete-li vytvořit výše uvedený soubor, musíme to udělat tímto způsobem..
$ touch hi\ my\ name\ is\ avishek.txt hi my name is avishek.txt
Snažil jsem se pokrýt všechny scénáře, se kterými se můžete setkat. Většina z výše uvedených implementací je výslovně pro BASH Shell a nemusí fungovat v jiném shellu.
Pokud máte pocit, že mi něco uniklo (to je velmi běžné a lidská přirozenost), můžete svůj návrh uvést v komentářích níže. Buďte ve spojení, pokračujte v komentování. Zůstaňte naladěni a ve spojení! Lajkujte a sdílejte nás a pomozte nám se šířit!