We komen heel regelmatig bestanden en mappen tegen. In de meeste gevallen is de bestands-/mapnaam gerelateerd aan de inhoud van het bestand/de map en begint deze met een cijfer en tekens. Alfanumerieke bestandsnamen komen vrij vaak voor en worden veel gebruikt, maar dit is niet het geval wanneer we te maken hebben met bestands-/mapnamen die speciale tekens bevatten.
Opmerking: We kunnen bestanden van elk type hebben, maar voor de eenvoud en gemakkelijke implementatie zullen we te maken hebben met tekstbestand (.tekst), in het hele artikel.
Voorbeelden van de meest voorkomende bestandsnamen zijn:
abc.txt. avi.txt. debian.txt...
Voorbeelden van numerieke bestandsnamen zijn:
121.txt. 3221.txt. 674659.txt...
Voorbeelden van alfanumerieke bestandsnamen zijn:
bijv.84235.txt. 3kf43nl2.txt. 2323ddw.txt...
Voorbeelden van bestandsnamen die een speciaal teken hebben en niet erg gebruikelijk zijn:
#232.txt. #bkf.txt. #bjsd3469.txt. #121nkfd.txt. -2232.txt. -fbjdew.txt. -gi32kj.txt. 321.txt. --bk34.txt...
Een van de meest voor de hand liggende vragen hier is: wie maakt in vredesnaam bestanden/mappen met een naam die een hash. heeft? (#)
, een puntkomma (;)
, een streepje (-)
of een ander speciaal teken.
Ik ben het met je eens dat dergelijke bestandsnamen niet gebruikelijk zijn, maar toch zou je shell niet moeten breken / opgeven als je met dergelijke bestandsnamen te maken krijgt. Ook technisch gesproken wordt alles, of het nu om een map, een stuurprogramma of iets anders gaat, als bestand in Linux behandeld.
Maak een bestand dat begint met een streepje (-)
, inspraak -abx.txt.
$ raak -abc.txt aan.
touch: ongeldige optie -- 'b' Probeer 'touch --help' voor meer informatie.
De reden voor bovenstaande fout, die shell interpreteert alles na een streepje (-)
, als optie, en uiteraard is er geen dergelijke optie, vandaar de fout.
Om een dergelijke fout op te lossen, moeten we de Bash-shell vertellen (ja, dit en de meeste andere voorbeelden in het artikel zijn voor BASH) om niets na een speciaal teken (hier streepje) als optie te interpreteren.
Er zijn twee manieren om deze fout op te lossen:
$ raak -- -abc.txt [Optie #1] $ tik op ./-abc.txt [Optie#2]
U kunt het aldus aangemaakte bestand op beide bovenstaande manieren verifiëren door commando's uit te voeren ls of ls -l voor lange lijst.
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 11:05 -abc.txt
Om het bovenstaande bestand te bewerken, kunt u het volgende doen:
$ nano -- -abc.txt of $ nano ./-abc.txt
Opmerking: U mag vervangen nano met een andere editor naar keuze zeg vim zoals:
$ vim -- -abc.txt of $ vim ./-abc.txt
Op dezelfde manier moet je om zo'n bestand te verplaatsen:
$ mv -- -abc.txt -a.txt. of. $ mv -- -a.txt -abc.txt.
en om dit bestand te verwijderen, moet u het volgende doen:
$ rm -- -abc.txt. of. $ rm ./-abc.txt
Als je veel bestanden in een map hebt waarvan de naam een streepje bevat, en je wilt ze allemaal tegelijk verwijderen, doe dan als volgt:
$ rm./-*
1. Dezelfde regel als hierboven besproken, geldt voor een willekeurig aantal hypes in de naam van het bestand en hun voorkomen. nl., -a-b-c.txt, ab-c.txt, abc-.txt, enz.
2. Dezelfde regel als hierboven besproken, volgt voor de naam van de map met een willekeurig aantal hyperen en hun voorkomen, behalve het feit dat u voor het verwijderen van de map 'rm -rf' zoals:
$ rm -rf -- -abc. of. $ rm -rf ./-abc.
Het symbool #
heeft een heel andere betekenis in BASH. Alles na een #
wordt geïnterpreteerd als commentaar en wordt daarom genegeerd door BASH.
maak een bestand aan #abc.txt.
$ raak #abc.txt aan.
touch: ontbrekende bestandsoperand. Probeer 'touch --help' voor meer informatie.
De reden voor bovenstaande fout, die Bash interpreteert #abc.txt een opmerking en dus negeren. Dus de commando touch is doorgegeven zonder enig bestand operand, en daarom is de fout.
Om een dergelijke fout op te lossen, kunt u BASH vragen om niet te interpreteren # als commentaar.
$ raak ./#abc.txt aan. of. $ tik op '#abc.txt'
en verifieer het bestand dat zojuist is gemaakt als:
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 12:14 #abc.txt
Maak nu een bestand waarvan de naam bevat #
overal behalve bij het bedelen.
$ raak ./a#bc.txt aan. $ raak ./abc#.txt aan of. $ raak 'a#bc.txt' aan $ tik op 'abc#.txt'
Loop 'ls -l' om het te verifiëren:
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 12:16 a#bc.txt -rw-r--r-- 1 avi avi 0 juni 8 12:16 abc#.txt
Wat gebeurt er als je twee bestanden maakt (zeg een en #bc) onmiddelijk:
$ raak a.txt #bc.txt aan.
Controleer het zojuist gemaakte bestand:
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 12:18 a.txt
Uit het bovenstaande voorbeeld blijkt duidelijk dat het alleen een bestand heeft gemaakt 'een' en bestand '#bc' is genegeerd. Om de bovenstaande situatie met succes uit te voeren, kunnen we doen,
$ raak a.txt ./#bc.txt aan. of. $ raak a.txt '#bc.txt' aan.
en verifieer het als:
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 12:20 a.txt -rw-r--r-- 1 avi avi 0 juni 8 12:20 #bc.txt
U kunt het bestand als volgt verplaatsen:
$ mv ./#bc.txt ./#cd.txt. of. $ mv '#bc.txt' '#cd.txt'
Kopieer het als:
$ cp ./#cd.txt ./#de.txt. of. $ cp '#cd.txt' '#de.txt'
U kunt het bewerken als met behulp van uw keuze van editor als:
$ vi ./#cd.txt. of. $ vi '#cd.txt'
$ nano ./#cd.txt. of. $ nano '#cd.txt'
En verwijder het als:
$ rm ./#bc.txt of. $ rm '#bc.txt'
Om alle bestanden met hash te verwijderen (#) in de bestandsnaam, kunt u het volgende gebruiken:
# rm ./#*
Voor het geval je het niet weet, de puntkomma fungeert als een commandoscheidingsteken in BASH en misschien ook in een andere shell. Puntkomma laat je meerdere commando's in één keer uitvoeren en fungeert als scheidingsteken. Heb je ooit te maken gehad met een bestandsnaam met een puntkomma erin? Als u hier niet bent, zult u dat doen.
Maak een bestand met een puntkomma erin.
$ raak ;abc.txt aan.
touch: ontbrekende bestandsoperand. Probeer 'touch --help' voor meer informatie. bash: abc.txt: opdracht niet gevonden.
De reden voor bovenstaande fout, dat wanneer u de bovenstaande opdracht BASH interpreteert: aanraken als een opdracht, maar kon geen bestandsoperand vóór puntkomma vinden en daarom rapporteert het een fout. Het meldt ook een andere fout die 'abc.txt' commando niet gevonden, alleen omdat BASH na puntkomma een ander commando verwachtte en 'abc.txt’, is geen bevel.
Om een dergelijke fout op te lossen, vertel BASH om puntkomma niet te interpreteren als opdrachtscheidingsteken, zoals:
$ raak ./';abc.txt' aan of. $ raak ';abc.txt' aan
Opmerking: We hebben de bestandsnaam tussen enkele aanhalingstekens geplaatst ''
. Het vertelt BASH dat ;
is een onderdeel van de bestandsnaam en geen opdrachtscheidingsteken.
De rest van de actie (nl. kopiëren, verplaatsen, verwijderen) op het bestand en de map met een puntkomma in de naam kan eenvoudig worden uitgevoerd door de naam tussen enkele aanhalingstekens te plaatsen.
Vereist niets extra's, doe het gewoon op de normale manier, zoals een eenvoudige bestandsnaam zoals hieronder weergegeven.
$ raak +12.txt. aan
U moet de bestandsnaam tussen enkele aanhalingstekens plaatsen, zoals we deden in het geval van puntkomma's. De rest is rechttoe rechtaan..
$ raak '$12.txt' aan.
U hoeft niets anders te doen, behandel het als een normaal bestand.
$ raak %12.txt aan.
Als Asterisk in de bestandsnaam staat, verandert er niets en kunt u het als normaal bestand blijven gebruiken.
$ raak *12.txt aan.
Opmerking: Wanneer u een bestand moet verwijderen dat begint met *
, Gebruik nooit de volgende commando's om dergelijke bestanden te verwijderen.
$ rm * of. $ rm -rf *
Gebruik in plaats daarvan,
$ rm ./*.txt.
Sluit gewoon de bestandsnaam in tussen enkele aanhalingstekens en de rest is hetzelfde.
$ raak '!12.txt' aan.
Niets extra, behandel een bestandsnaam met At Sign als een niet-normaal bestand.
$ raak '@12.txt' aan.
Geen extra aandacht vereist. Gebruik een bestand met ^
in bestandsnaam als normaal bestand.
$ raak ^12.txt aan.
De bestandsnaam moet tussen enkele aanhalingstekens staan en u bent klaar om te gaan.
$ raak '&12.txt' aan.
Als de bestandsnaam tussen haakjes staat, moet u de bestandsnaam tussen enkele aanhalingstekens plaatsen.
$ raak '(12.txt)' aan.
Geen extra zorg nodig. Behandel het gewoon als een ander bestand.
$ raak {12.txt} aan.
Een bestandsnaam met punthaken moet tussen enkele aanhalingstekens staan.
$ raak '<12.txt>' aan.
Behandel bestandsnamen met vierkante haken als normale bestanden en u hoeft er niet extra op te letten.
$ raak [12.txt] aan.
Ze zijn heel gewoon en hebben niets extra's nodig. Doe gewoon wat je zou hebben gedaan met een normaal bestand.
$ raak _12.txt aan.
Het hebben van een Gelijk-aan-teken verandert niets, u kunt het als normaal bestand gebruiken.
$ raak =12.txt aan.
Backslash vertelt shell om het volgende teken te negeren. U moet de bestandsnaam tussen enkele aanhalingstekens plaatsen, zoals we deden in het geval van puntkomma's. De rest van de dingen zijn rechttoe rechtaan.
$ raak '.txt' aan.
U kunt geen bestand maken waarvan de naam een schuine streep naar voren bevat (/)
, totdat uw bestandssysteem een bug heeft. Er is geen manier om aan een voorwaartse slash te ontsnappen.
Dus als je een bestand kunt maken zoals ‘/12.txt’ of ‘b/c.txt’ dan heeft je bestandssysteem een bug of heb je Unicode-ondersteuning, waarmee je een bestand kunt maken met een slash. In dit geval is de slash geen echte slash maar een Unicode-teken dat lijkt op een slash.
Nogmaals, een voorbeeld waarbij u geen speciale poging hoeft te doen. Een bestandsnaam met Questionmark kan op de meest algemene manier worden behandeld.
$ raak ?12.txt aan.
De bestanden die beginnen met punt (.)
zijn heel speciaal in Linux en worden dot-bestanden genoemd. Het zijn verborgen bestanden, meestal configuratie- of systeembestanden. Je moet schakelaar '-een' of '-EEN' met ls commando om dergelijke bestanden te bekijken.
Het maken, bewerken, hernoemen en verwijderen van dergelijke bestanden is eenvoudig.
$ raak .12.txt aan.
Opmerking: In Linux mag je net zoveel punten hebben (.)
zoals je nodig hebt in een bestandsnaam. In tegenstelling tot andere systeempunten in bestandsnaam betekent dit niet dat naam en extensie worden gescheiden. U kunt een bestand met meerdere punten maken als:
$ raak 1.2.3.4.5.6.7.8.9.10.txt aan.
en controleer het als:
$ ls -l totaal 0. -rw-r--r-- 1 avi avi 0 juni 8 14:32 1.2.3.4.5.6.7.8.9.10.txt
Je kunt een komma in een bestandsnaam hebben, zoveel als je wilt en je hebt niets extra's nodig. Doe het gewoon op de normale manier, als een eenvoudige bestandsnaam.
$ raak ,12.txt aan. of. $ raak ,12,.txt aan.
Je kunt een dubbele punt in een bestandsnaam hebben, zoveel als je wilt en je hebt niets extra's nodig. Doe het gewoon op de normale manier, als een eenvoudige bestandsnaam.
$ raak :12.txt aan. of. $ raak :12:.txt aan.
Om aanhalingstekens in bestandsnaam te hebben, moeten we de regel van uitwisseling gebruiken. D.w.z. als u een enkel aanhalingsteken in de bestandsnaam wilt hebben, sluit dan de bestandsnaam in met dubbele aanhalingstekens en als u een dubbel aanhalingsteken in de bestandsnaam wilt hebben, sluit het dan in met een enkel aanhalingsteken.
$ raak "15'.txt" aan en $ raak '15'.txt' aan.
Sommige editors in Linux houden van emacs maak een back-upbestand van het bestand dat wordt bewerkt. Het back-upbestand heeft de naam van het originele bestand plus een tilde aan het einde van de bestandsnaam. U kunt op elke locatie een bestand hebben waarvan de naam tilde bevat, gewoon als:
$ raak ~1a.txt aan. of. $raak 2b~.txt aan.
Maak een bestand waarvan de naam spatie heeft tussen karakter/woord, zeg “hallo mijn naam is avishek.txt”.
Het is geen goed idee om een bestandsnaam met spaties te hebben en als u een leesbare naam moet onderscheiden, moet u een onderstrepingsteken of een streepje gebruiken. Als u echter zo'n bestand moet maken, moet u een achterwaartse slash gebruiken die het volgende teken negeert. Om het bovenstaande bestand te maken, moeten we het op deze manier doen.
$ raak hi\ mijn\ naam\ is\ avishek.txt aan hallo mijn naam is avishek.txt
Ik heb geprobeerd alle scenario's die je tegenkomt te behandelen. De meeste van de bovenstaande implementaties zijn expliciet voor BASH Shell en werken mogelijk niet in een andere shell.
Als je denkt dat ik iets heb gemist (dat is heel gebruikelijk en menselijk van aard), kun je je suggestie opnemen in de onderstaande opmerkingen. Blijf verbonden, blijf reageren. Blijf op de hoogte en verbonden! Like en deel ons en help ons verspreiden!