Ci imbattiamo in nomi di file e cartelle molto regolarmente. Nella maggior parte dei casi il nome del file/cartella è correlato al contenuto del file/cartella e inizia con numero e caratteri. I nomi di file alfanumerici sono piuttosto comuni e ampiamente utilizzati, ma questo non è il caso quando abbiamo a che fare con nomi di file/cartelle che contengono caratteri speciali.
Nota :Possiamo avere file di qualsiasi tipo ma per semplicità e facile implementazione ci occuperemo di File di testo (.txt ), in tutto l'articolo.
Esempi di nomi di file più comuni sono:
abc.txt avi.txt debian.txt ...
Esempi di nomi di file numerici sono:
121.txt 3221.txt 674659.txt ...
Esempi di nomi di file alfanumerici sono:
eg84235.txt 3kf43nl2.txt 2323ddw.txt ...
Esempi di nomi di file che hanno un carattere speciale e non sono molto comuni:
#232.txt #bkf.txt #bjsd3469.txt #121nkfd.txt -2232.txt -fbjdew.txt -gi32kj.txt --321.txt --bk34.txt ...
Una delle domande più ovvie qui è:chi diavolo crea/gestisce il nome di file/cartelle con un hash (#)
, un punto e virgola (;)
, un trattino (-)
o qualsiasi altro carattere speciale.
Sono d'accordo con te, che tali nomi di file non sono comuni, tuttavia la tua shell non dovrebbe rompersi/arrendersi quando devi gestire tali nomi di file. Anche parlando tecnicamente ogni cosa, che si tratti di cartella, driver o qualsiasi altra cosa, viene trattata come file in Linux.
Gestire un file con un trattino (-) nel nome
Crea un file che inizi con un trattino (-)
, ad esempio -abx.txt .
$ touch -abc.txt
Risultato campione
touch: invalid option -- 'b' Try 'touch --help' for more information.
Il motivo dell'errore precedente, quella shell interpreta qualsiasi cosa dopo un trattino (-)
, come opzione, e ovviamente non esiste tale opzione, quindi è l'errore.
Per risolvere tale errore, dobbiamo dire alla shell Bash (sì, questo e la maggior parte degli altri esempi nell'articolo sono per BASH ) per non interpretare nulla dopo un carattere speciale (qui trattino), come opzione.
Esistono due modi per risolvere questo errore come:
$ touch -- -abc.txt [Option #1] $ touch ./-abc.txt [Option #2]
Puoi verificare il file così creato in entrambi i modi precedenti eseguendo i comandi ls o ls -l per un elenco lungo.
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt
Per modificare il file sopra puoi fare:
$ nano -- -abc.txt or $ nano ./-abc.txt
Nota :puoi sostituire nano con qualsiasi altro editor di tua scelta dì vim come:
$ vim -- -abc.txt or $ vim ./-abc.txt
Allo stesso modo per spostare tale file devi fare:
$ mv -- -abc.txt -a.txt or $ mv -- -a.txt -abc.txt
e per eliminare questo file, devi fare:
$ rm -- -abc.txt or $ rm ./-abc.txt
Se hai molti file in una cartella il cui nome contiene trattino e vuoi eliminarli tutti in una volta, fai come:
$ rm ./-*
Importante da notare:
1. La stessa regola discussa sopra segue per qualsiasi numero di trattini nel nome del file e la loro occorrenza. Vale a dire, -a-b-c.txt , ab-c.txt , abc-.txt , ecc.
2. La stessa regola discussa sopra segue per il nome della cartella che ha un numero qualsiasi di trattini e la loro occorrenza, tranne per il fatto che per eliminare la cartella devi usare 'rm -rf ' come:
$ rm -rf -- -abc or $ rm -rf ./-abc
Gestire file con HASH (#) nel nome
Il simbolo #
ha un significato molto diverso in BASH. Qualsiasi cosa dopo un #
viene interpretato come commento e quindi trascurato da BASH.
Comprendilo usando esempi:
crea un file #abc.txt .
$ touch #abc.txt
Risultato campione
touch: missing file operand Try 'touch --help' for more information.
Il motivo dell'errore precedente è che Bash sta interpretando #abc.txt un commento e quindi ignorando. Quindi il comando touch è stato passato senza alcun file Operando, e quindi è l'errore.
Per risolvere tale errore, puoi chiedere a BASH di non interpretare # come commento.
$ touch ./#abc.txt or $ touch '#abc.txt'
e verifica il file appena creato come:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt
Ora crea un file il cui nome contiene #
ovunque tranne che all'accattonaggio.
$ touch ./a#bc.txt $ touch ./abc#.txt or $ touch 'a#bc.txt' $ touch 'abc#.txt'
Esegui "ls -l ' per verificarlo:
$ 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
Cosa succede quando crei due file (ad esempio a e #bc ) subito:
$ touch a.txt #bc.txt
Verifica il file appena creato:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt
Ovvio dall'esempio sopra, ha creato solo il file 'a ' e file '#bc ' è stato ignorato. Per eseguire con successo la situazione di cui sopra possiamo farlo,
$ touch a.txt ./#bc.txt or $ touch a.txt '#bc.txt'
e verificalo come:
$ 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
Puoi spostare il file come:
$ mv ./#bc.txt ./#cd.txt or $ mv '#bc.txt' '#cd.txt'
Copialo come:
$ cp ./#cd.txt ./#de.txt or $ cp '#cd.txt' '#de.txt'
Puoi modificarlo utilizzando la tua scelta di editor come:
$ vi ./#cd.txt or $ vi '#cd.txt'
$ nano ./#cd.txt or $ nano '#cd.txt'
Ed eliminalo come:
$ rm ./#bc.txt or $ rm '#bc.txt'
Per eliminare tutti i file con hash (# ) nel nome del file, puoi utilizzare:
# rm ./#*
Gestire file con punto e virgola (;) nel nome
Nel caso non lo sapessi, il punto e virgola funge da separatore di comandi in BASH e forse anche in altre shell. Il punto e virgola ti consente di eseguire più comandi in una volta sola e funge da separatore. Hai mai avuto a che fare con nomi di file con punto e virgola? Altrimenti qui lo farai.
Crea un file con punto e virgola.
$ touch ;abc.txt
Risultato campione
touch: missing file operand Try 'touch --help' for more information. bash: abc.txt: command not found
Il motivo dell'errore precedente è che quando esegui il comando precedente BASH interpreta touch come comando ma non è stato possibile trovare alcun operando di file prima del punto e virgola e quindi segnala un errore. Segnala anche un altro errore che "abc.txt ' comando non trovato, solo perché dopo il punto e virgola BASH si aspettava un altro comando e 'abc.txt ', non è un comando.
Per risolvere tale errore, di' a BASH di non interpretare il punto e virgola come separatore di comandi, come:
$ touch ./';abc.txt' or $ touch ';abc.txt'
Nota :Abbiamo racchiuso il nome del file tra virgolette singole ''
. Dice a BASH che ;
fa parte del nome del file e non del separatore di comandi.
Il resto dell'azione (vale a dire, copiare, spostare, eliminare) sul file e sulla cartella con punto e virgola nel nome può essere eseguita direttamente racchiudendo il nome tra virgolette singole.
Gestione di altri caratteri speciali nel nome di file/cartelle
Segno più (+) nel nome del file
Non richiede nulla in più, fallo normalmente, con un semplice nome di file come mostrato di seguito.
$ touch +12.txt
Segno del dollaro ($) nel nome del file
Devi racchiudere il nome del file tra virgolette singole, come abbiamo fatto nel caso del punto e virgola. Il resto delle cose è semplice..
$ touch '$12.txt'
Percentuale (%) nel nome del file
Non devi fare nulla di diverso, trattalo come un file normale.
$ touch %12.txt
Asterisco (*) nel nome del file
Avere Asterisk nel nome del file non cambia nulla e puoi continuare a usarlo come file normale.
$ touch *12.txt
Nota :Quando devi eliminare un file che inizia con *
, Non utilizzare mai i seguenti comandi per eliminare tali file.
$ rm * or $ rm -rf *
Invece usa,
$ rm ./*.txt
Punto esclamativo (!) nel nome del file
Racchiudi semplicemente il nome del file tra virgolette singole e il resto delle cose è lo stesso.
$ touch '!12.txt'
Al segno (@) nel nome del file
Niente in più, tratta un nome di file con At Sign come file non rmal.
$ touch '@12.txt'
^ nel nome del file
Nessuna ulteriore attenzione richiesta. Usa un file con ^
nel nome del file come file normale.
$ touch ^12.txt
E commerciale (&) nel nome del file
Il nome del file dovrebbe essere racchiuso tra virgolette singole e sei pronto per iniziare.
$ touch '&12.txt'
Tra parentesi () nel nome del file
Se il nome del file ha parentesi, è necessario racchiudere il nome del file tra virgolette singole.
$ touch '(12.txt)'
Parentesi graffe {} nel nome del file
Non sono necessarie cure extra. Consideralo solo come un altro file.
$ touch {12.txt}
Chevron <> nel nome del file
Un nome file con Chevron deve essere racchiuso tra virgolette singole.
$ touch '<12.txt>'
parentesi quadre [ ] nel nome del file
Tratta il nome del file con parentesi quadre come file normali e non devi prenderti cura di esso.
$ touch [12.txt]
Under punteggio (_) nel nome del file
Sono molto comuni e non richiedono nulla in più. Fai solo quello che avresti fatto con un file normale.
$ touch _12.txt
Uguale a (=) in Nome file
Avere un segno di uguale a non cambia nulla, puoi usarlo come un normale file.
$ touch =12.txt
Gestire la barra rovesciata (\)
La barra rovesciata dice alla shell di ignorare il carattere successivo. Devi racchiudere il nome del file tra virgolette singole, come abbiamo fatto nel caso del punto e virgola. Il resto delle cose è semplice.
$ touch '.txt'
Il caso speciale del taglio in avanti
Non puoi creare un file il cui nome includa una barra (/)
, fino a quando il tuo file system non ha un bug. Non c'è modo di sfuggire a un taglio in avanti.
Quindi, se puoi creare un file come '/12.txt' o 'b/c.txt' quindi o il tuo file system ha un bug o hai il supporto Unicode, che ti consente di creare un file con una barra. In questo caso la barra non è una vera barra, ma un carattere Unicode che assomiglia a una barra.
Punto interrogativo (?) nel nome del file
Ancora una volta, un esempio in cui non è necessario fare alcun tentativo speciale. Un nome di file con punto interrogativo può essere trattato nel modo più generale.
$ touch ?12.txt
Segna punto (.) nel nome del file
I file che iniziano con il punto (.)
sono molto speciali in Linux e sono chiamati file dot. Sono file nascosti generalmente una configurazione o file di sistema. Devi usare l'interruttore '-a ' o '-A ' con comando ls per visualizzare tali file.
La creazione, la modifica, la ridenominazione e l'eliminazione di tali file sono semplici.
$ touch .12.txt
Nota :In Linux potresti avere tanti punti (.)
come necessario in un nome file. A differenza di altri punti di sistema nel nome del file non significa separare nome ed estensione. Puoi creare un file con più punti come:
$ touch 1.2.3.4.5.6.7.8.9.10.txt
e controllalo come:
$ 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
Virgola (,) nel nome del file
Puoi avere una virgola nel nome di un file, quante ne vuoi e non hai bisogno di nulla in più. Fallo in modo normale, come un semplice nome di file.
$ touch ,12.txt or $ touch ,12,.txt
Due punti (:) in Nome file
Puoi avere i due punti nel nome di un file, quanti ne vuoi e non hai bisogno di nulla in più. Fallo in modo normale, come un semplice nome di file.
$ touch :12.txt or $ touch :12:.txt
Avere virgolette (singole e doppie) nel nome del file
Per avere virgolette nel nome del file, dobbiamo usare la regola dello scambio. Cioè, se hai bisogno di virgolette singole nel nome del file, racchiudi il nome del file tra virgolette doppie e se hai bisogno di virgolette doppie nel nome del file, racchiudilo con virgolette singole.
$ touch "15'.txt" and $ touch '15”.txt'
Tilde (~) nel nome del file
Alcuni editor in Linux come emacs creare un file di backup del file in fase di modifica. Il file di backup ha il nome del file originale più una tilde alla fine del nome del file. Puoi avere un file il cui nome include tilde, in qualsiasi posizione semplicemente come:
$ touch ~1a.txt or $touch 2b~.txt
Spazio bianco nel nome del file
Crea un file il cui nome abbia uno spazio tra carattere/parola, dì "ciao, mi chiamo avishek.txt ”.
Non è una buona idea avere il nome del file con spazi e se devi distinguere un nome leggibile, dovresti usare, underscore o trattino. Tuttavia, se devi creare un file del genere, devi usare una barra all'indietro che ignora il carattere successivo. Per creare il file sopra dobbiamo farlo in questo modo..
$ touch hi\ my\ name\ is\ avishek.txt hi my name is avishek.txt
Ho provato a coprire tutto lo scenario che potresti incontrare. La maggior parte delle implementazioni di cui sopra sono esplicitamente per BASH Shell e potrebbero non funzionare in altre shell.
Se ritieni che mi sia perso qualcosa (che è molto comune e di natura umana), puoi includere il tuo suggerimento nei commenti qui sotto. Resta connesso, continua a commentare. Resta sintonizzato e connesso! Metti mi piace e condividici e aiutaci a diffonderci!