Come la maggior parte dei sistemi operativi, Linux supporta i nomi di file con spazi. Ma usare questi nomi di file sulla riga di comando non è sempre semplice. Ecco diversi modi in cui è possibile gestire i nomi di file contenenti spazi.
L'umile nome file
Perché gli spazi nei nomi dei file Linux sono un dolore
Come citare e sfuggire agli spazi
Come risolvere il problema dello spazio alla sua fonte
L'espansione della scheda semplifica la tratta degli spazi
Come utilizzare i file di file con spazi negli script bash
Distanziati, ma non traballante
L'umile nome file
Tutto memorizzato sul tuo computer disco rigido deve avere un nome. Senza un nome, non esisterebbero file. Tutte le applicazioni e i demoni che vengono lanciati quando il computer si avvia e tutto il software utilizzato, devono essere identificati e archiviati in un file system. Tale identificazione è il nome del file. "
La stessa cosa si applica ai file creati o installati. Tutti i documenti, le immagini e la musica hanno bisogno di nomi di file. Senza nomi di file, nessuna delle tue risorse digitali potrebbe esistere. Poiché i nomi di file sono così importanti, Linux si sforza di imporre il minor numero di regole sulla loro composizione.
Su Linux, un nome file può contenere qualsiasi carattere a parte la barra in avanti "
/
"E il personaggio null,
0x00
. Il carattere null viene utilizzato per contrassegnare la fine di una stringa, quindi non può essere presente nella stringa stessa, o Linux troncherebbe il nome file nella posizione del carattere null. IL "
/
"La barra in avanti viene utilizzata come separatore nei percorsi della directory.
I filenati sono sensibili al caso, e può essere lungo fino a 255 byte , incluso il carattere null. I percorsi di directory possono essere lunghi fino a 4096 byte, incluso il carattere nullo. Nota che questa è la loro lunghezza in byte , che potrebbe non equivalere direttamente a caratteri . I caratteri Unicode a 16 bit, ad esempio, prendono due byte ciascuno.
Gli appassionati di retrò e quelli con lunghi ricordi sapranno che nei primi giorni dei personal computer, Sistema operativo del disco di Microsoft , DOS, era insensibile al caso e aveva un limite di file di otto caratteri, oltre a un personaggio di tre caratteri estensione .
Dovevi essere molto premuroso e talvolta creativo quando hai chiamato i file. In confronto, la libertà che abbiamo oggi significa che possiamo nominare i file quello che vogliamo, con poco pensiero a qualcosa di diverso dalla descrizione che stiamo creando per quel file.
Ma con i nomi di file, ciò che ci fa scattare più spesso non sono i personaggi che digitiamo, sono gli spazi tra loro.
Perché gli spazi nei nomi dei file Linux sono un dolore
Shells come Bash interpreteranno una stringa di parole separate dallo spazio come argomenti di comando individuali, non un singolo argomento. Ecco un esempio, usando
tocco
A
Crea un nuovo file
Chiamato "Il mio nuovo file.txt."
Come possiamo vedere,
ls
Ci mostra che ci sono tre file creati, uno chiamato "My", un altro chiamato "New" e uno in più chiamato "file.txt".
Notare che
tocco
Non si è lamentato o lanciato un errore. Effettua ciò che pensa che gli stiamo chiedendo di fare. Quindi ci restituisce silenziosamente alla riga di comando. Se non siamo motivati a controllare, non sapremo che le cose non sono andate secondo i piani.
Per creare il file che volevamo, dobbiamo citare o fuggire.
Come citare e sfuggire agli spazi
Se citiamo l'intero nome file,
tocco
sa che deve trattare il testo citato come un singolo argomento.
Questa volta otteniamo il singolo file che ci aspettiamo.
Possiamo ottenere lo stesso risultato se utilizziamo il personaggio di Backslash "
\
"Per sfuggire agli spazi. "Fuggire" gli spazi non sono trattati come personaggi speciali - cioè separatori di argomenti - sono considerati spazi semplici.
Funziona, ma gli spazi di fuga rendono i nomi di file di digitazione più lenti e soggetti a errori. Le cose possono diventare davvero brutte se hai anche nomi di directory con spazi.
Quel comando copia un singolo file di testo da una directory chiamata "Dir One" a una directory chiamata "Dir Two" e salva la copia come file BAK. Ed è un esempio abbastanza semplice.
Come risolvere il problema dello spazio alla sua fonte
Se sono i tuoi file, potresti prendere la decisione della politica per non utilizzare mai spazi e creare (o rinomina ) Filenazioni come questa.
Certo, questa è una soluzione robusta ma è ancora brutta. Ci sono opzioni migliori, come l'uso dei trattini "
-
"O sottolinea"
_
"Per separare le tue parole.
Entrambi elimineranno il problema e sono leggibili. Se non vuoi aggiungere caratteri extra ai tuoi file di file, puoi usare Camelcase Per rendere le leggibili i tuoi nomi di file, in questo modo:
L'espansione della scheda semplifica la tratta degli spazi
Naturalmente, adottare una convenzione di denominazione e attenersi ad essa ti aiuterà solo quando hai a che fare con i tuoi file. È improbabile che i file che provengono da qualsiasi altra parte segui la tua convenzione di denominazione adottata.
Puoi utilizzare l'espansione delle schede per aiutarti a "compilare" i filesseggi per noi. Diciamo che vogliamo
eliminare
Il file BAK che abbiamo creato in "Dir Two", usando
Rm
.
Iniziamo digitando "RM Dir" perché stiamo usando il
Rm
Comando e sappiamo che il nome della directory inizia con "Dir".
Premendo il tasto "Tab" fa scansionare Bash per le corrispondenze nella directory corrente.
Ci sono due directory che iniziano con "Dir" e in entrambi i casi il personaggio successivo è uno spazio. Quindi Bash aggiunge il personaggio di Backslash "
\
"E uno spazio. Bash quindi aspetta che forniamo il personaggio successivo. Ha bisogno del personaggio successivo per distinguere tra le due possibili partite in questa directory.
Digiteremo una "T", per "due", quindi premiamo di nuovo "Tab".
Bash completa il nome della directory per noi e ci aspetta per digitare l'inizio del nome file.
Abbiamo solo un file in questa directory, quindi digitare la prima lettera del nome file, "M", è sufficiente per far sapere a Bash quale file vogliamo usare. Digitare "M" e premere "Tab" completa il nome file per noi e "Enter" esegue l'intero comando.
L'espansione delle schede semplifica la mano di ottenere file di file e accelera anche la navigazione e la digitazione sulla riga di comando in generale.
IMPARENTATO: Utilizzare il completamento della scheda per digitare i comandi più velocemente su qualsiasi sistema operativo
Come utilizzare i file di file con spazi negli script bash
Non è una sorpresa Script Avere esattamente gli stessi problemi con gli spazi nei nomi di file come la riga di comando. Se stai passando un nome file come variabile, assicurati di citare il nome della variabile.
Questo piccolo script controlla la directory corrente per i file che corrispondono al modello di file "*.txt" e li memorizza in una variabile chiamata
file_list
.
UN
per
ciclo continuo
viene utilizzato per eseguire un'azione semplice su ciascuno.
Copia questo testo in un editor e salvalo in un file chiamato "Files.sh." Quindi usa
IL
chmod
comando
per renderlo eseguibile.
Abbiamo alcuni file in questa directory. Uno ha un semplice nome di file e gli altri due usano sottolinei "
_
"O doni"
-
"Invece di spazi. Questo è ciò che vediamo quando eseguiamo la sceneggiatura.
Sembra funzionare bene. Ma cambiamo i file nella directory per i file che contengono spazi nei loro nomi.
Ogni parola in ogni nome file viene gestita come se fosse un nome file da solo, e quindi lo script fallisce. Ma tutto ciò che dobbiamo fare per realizzare gli spazi per la maniglia degli script nei nomi dei file è citare il
$ file
variabile all'interno del
per
ciclo continuo.
Si noti che il segno del dollaro "
$
"È dentro le citazioni. Abbiamo apportato quella modifica e l'abbiamo salvata nel file di script "files.sh". Questa volta, i nomi dei file sono gestiti correttamente.
IMPARENTATO: Come elaborare una riga di file per riga in uno script di Bash Linux
Distanziati, ma non traballante
Evitare gli spazi nei tuoi filmato ti porterà solo così lontano. È inevitabile che incontrerai file da altre fonti con nomi che contengono spazi. Per fortuna, se è necessario gestire quei file sulla riga di comando o negli script, ci sono modi semplici per farlo.