La fel ca majoritatea sistemelor de operare, Linux acceptă numele de fișiere cu spații din ele. Dar utilizarea acestor nume de fișiere pe linia de comandă nu este întotdeauna simplă. Iată mai multe moduri în care puteți gestiona numele de fișiere care conțin spații.
Numele umil al fișierului
De ce spațiile din numele fișierelor Linux sunt o durere
Cum să citați și să scăpați spații
Cum să remediați problema spațiului la sursa sa
Extinderea filei face ca tratarea cu spații să fie ușoară
Cum se folosește numele de fișiere cu spații în scripturile bash
Distanțat, dar nu flăcător
Numele umil al fișierului
Tot ce este stocat pe computerul dvs. hard disk trebuie să aibă un nume. Fără un nume, nu ar exista fișiere. Toate aplicațiile și daemonii care sunt lansate atunci când computerul dvs. pornește și tot software -ul pe care îl utilizați trebuie identificat și stocat într -un sistem de fișiere. Această identificare este numele fișierului. ”
Același lucru se aplică și fișierelor pe care le creați sau le instalați. Toate documentele, imaginile și muzica dvs. au nevoie de nume de fișiere. Fără nume de fișiere, niciunul dintre activele dvs. digitale nu ar putea exista. Deoarece numele de fișiere sunt atât de importante, Linux încearcă din greu să impună cât mai puține reguli cu privire la compoziția lor.
Pe Linux, un nume de fișier poate conține orice personaj în afară de slash -ul înainte "
/
”Și personajul nul,
0x00
. Caracterul nul este utilizat pentru a marca sfârșitul unui șir, astfel încât acesta nu poate fi prezent în șirul în sine, sau Linux ar trunca numele de fișier în poziția caracterului nul. „
/
”Slash înainte este utilizat ca separator pe căile de director.
Numele de fișiere sunt sensibile la caz, și poate avea până la 255 de octeți , inclusiv personajul nul. Căile de director pot avea până la 4096 octeți, inclusiv personajul nul. Rețineți că aceasta este lungimea lor în octeți , care s -ar putea să nu echivaleze direct cu personaje . Caracterele Unicode pe 16 biți, de exemplu, iau doi octeți fiecare.
Pasionații de calculare retro și cei cu amintiri lungi vor ști că în primele zile ale calculatoarelor personale, Sistemul de operare pe disc Microsoft , Dos, a fost insensibil în caz și a avut o limită de nume de fișier de opt caractere, plus un personaj cu trei caractere extensie .
Trebuia să fii foarte gânditor și uneori creativ când ai numit fișiere. Prin comparație, libertatea pe care o avem astăzi înseamnă că putem numi fișiere orice ne dorim, cu puțin gândit la orice altceva decât descrierea pe care o creăm pentru acel fișier.
Dar, cu numele de fișiere, ceea ce ne călătorește cel mai des nu sunt personajele pe care le tam, ci spațiile dintre ele.
De ce spațiile din numele fișierelor Linux sunt o durere
Shells precum Bash vor interpreta un șir de cuvinte separate de spațiu ca argumente de comandă individuale, nu un singur argument. Iată un exemplu, folosind
atingere
la
Creați un fișier nou
numit „Noul meu fișier.txt.”
Așa cum putem vedea,
ls
ne arată că există trei fișiere create, unul numit „my”, altul numit „nou” și încă unul numit „file.txt”.
Rețineți că
atingere
Nu s -a plâns și nu a aruncat o eroare. Realizează ce crede că îi cerem să o facem. Deci ne returnează în tăcere la linia de comandă. Dacă nu suntem motivați să verificăm, nu vom ști că lucrurile nu au dispărut conform planului.
Pentru a crea fișierul pe care l -am dorit, trebuie să cităm sau să scăpăm.
Cum să citați și să scăpați spații
Dacă cităm întregul nume de fișier,
atingere
știe că trebuie să trateze textul citat ca un singur argument.
De data aceasta obținem un singur fișier pe care îl așteptăm.
Putem obține același rezultat dacă folosim personajul backslash "
\
”Pentru a scăpa de spații. Prin „scăparea” spațiilor în care nu sunt tratate ca personaje speciale - adică separatorii de argumente - sunt considerate a fi spații vechi.
Acest lucru funcționează, dar scăparea spațiilor face ca tastarea numelor de fișiere să fie mai lente și predispuse la erori. Lucrurile pot deveni cu adevărat urâte dacă aveți nume de director cu spații în ele.
Această comandă copiază un singur fișier text dintr -un director numit „Dir One” într -un director numit „Dir Two” și salvează copia ca fișier Bak. Și este un exemplu destul de simplu.
Cum să remediați problema spațiului la sursa sa
Dacă sunt propriile fișiere, puteți lua decizia politicii de a nu utiliza niciodată spații și de a crea (sau redenumire în vrac ) nume de fișiere ca acesta.
Desigur, aceasta este o soluție robustă, dar este încă urâtă. Există opțiuni mai bune, cum ar fi utilizarea liniuțelor „
-
”Sau subliniază„
_
”Pentru a vă separa cuvintele.
Ambele vor evita problema și pot fi citite. Dacă nu doriți să adăugați caractere suplimentare la numele dvs. de fișiere, puteți utiliza Camelcase Pentru ca numele de fișier să fie citit, astfel:
Extinderea filei face ca tratarea cu spații să fie ușoară
Desigur, adoptarea unei convenții de denumire și respectarea acesteia va ajuta doar atunci când aveți de -a face cu propriile fișiere. Fișierele care provin din oriunde altundeva sunt puțin probabil să urmeze convenția de denumire adoptată.
Puteți utiliza extinderea filei pentru a vă ajuta să „completați” cu exactitate numele de fișiere pentru noi. Să spunem că vrem
șterge
fișierul Bak pe care l -am creat în „Dir Two”, folosind
RM
.
Începem prin a tasta „RM Dir” pentru că folosim
RM
comandă și știm că numele directorului începe cu „dir”.
Apăsarea tastei „Tab” determină scanarea Bash pentru meciurile din directorul curent.
Există două directoare care încep cu „Dir”, iar în ambele cazuri, următorul personaj este un spațiu. Deci Bash adaugă personajul din spate "
\
”Și un spațiu. Bash apoi așteaptă să oferim următorul personaj. Are nevoie de următorul personaj pentru a diferenția între cele două meciuri posibile din acest director.
Vom tasta A „T”, pentru „Two”, apoi vom apăsa „Tab” încă o dată.
Bash completează numele de director pentru noi și așteaptă ca noi să tastăm începutul numelor de fișier.
Avem un singur fișier în acest director, astfel încât tastarea primei litere a numelui de fișier, „M”, este suficient pentru a -l anunța pe Bash ce fișier vrem să folosim. Tastați „M” și apăsând „Tab” completează numele de fișier pentru noi, iar „Enter” execută întreaga comandă.
Extinderea filei face ușor să vă asigurați că veți obține nume de fișiere corecte și, de asemenea, grăbește navigarea și tastarea pe linia de comandă în general.
LEGATE DE: Utilizați fila completarea pentru a tasta comenzile mai rapid pe orice sistem de operare
Cum se folosește numele de fișiere cu spații în scripturile bash
Nu este de mirare că Scripturi Aveți exact aceleași probleme cu spațiile din numele de fișiere ca și linia de comandă. Dacă treceți un nume de fișier ca variabilă, asigurați -vă că citați numele variabilului.
Acest mic script verifică directorul curent pentru fișierele care se potrivesc cu modelul de fișier „*.txt” și le stochează într -o variabilă numită
File_list
.
A
pentru
buclă
este utilizat pentru a efectua o acțiune simplă pe fiecare.
Copiați acest text într -un editor și salvați -l într -un fișier numit „Files.sh”. Apoi folosește
Chmod
comanda
pentru a -l face executabil.
Avem câteva fișiere în acest director. Unul are un nume simplu de fișier, iar celelalte două folosesc subliniere "
_
”Sau liniuțe„
-
”În loc de spații. Aceasta este ceea ce vedem când rulăm scenariul.
Asta pare să funcționeze frumos. Dar să schimbăm fișierele din directorul pentru fișierele care conțin spații în numele lor.
Fiecare cuvânt din fiecare nume de fișier este gestionat ca și cum ar fi fost un nume de fișier pe cont propriu și astfel scriptul nu reușește. Dar tot ce trebuie să facem pentru a face ca scriptul să gestioneze spațiile din numele fișierelor este să cităm
$ fișier
variabilă în interiorul
pentru
buclă.
Rețineți că semnul dolarului "
$
”Se află în citate. Am făcut această modificare și am salvat -o în fișierul script „Files.sh”. De data aceasta, numele de fișiere sunt gestionate corect.
LEGATE DE: Cum se procesează o linie de fișier cu linie într -un script Linux Bash
Distanțat, dar nu flăcător
Evitarea spațiilor din propriile nume de fișiere vă va duce doar până acum. Este inevitabil să întâlnești fișiere din alte surse cu nume care conțin spații. Din fericire, dacă trebuie să gestionați acele fișiere pe linia de comandă sau în scripturi, există modalități ușoare de a face acest lucru.