GNU/Linux >> Znalost Linux >  >> Linux

Jak manipulovat s názvy souborů s mezerami a speciálními znaky v Linuxu

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!


Linux
  1. Co je NFS a jak jej nainstalovat na Linux

  2. Jak připojit a odpojit souborový systém v Linuxu

  3. Jak psát speciální znaky v Linuxu?

  1. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  2. Jak extrahovat soubory .gz a .tar.gz v Linuxu

  3. Jak v linuxu vidím du v GB místo MB?

  1. Jak komprimovat a dekomprimovat soubor .bz2 v Linuxu

  2. Linux File Command:Co dělá a jak jej používat

  3. Jak zabránit úpravám, mazání a přejmenování souborů/adresářů v Linuxu?