Podobnie jak większość systemów operacyjnych, Linux obsługuje nazwy plików z przestrzeniami w nich. Ale użycie tych nazw plików w wierszu poleceń nie zawsze jest proste. Oto kilka sposobów obsługi nazw plików zawierających przestrzenie.
Pokorna nazwa pliku
Dlaczego przestrzenie w nazwach plików Linux są ból
Jak cytować i uciec od przestrzeni
Jak rozwiązać problem przestrzeni u jego źródła
Rozszerzenie zakładki ułatwia przestrzenie
Jak używać nazw plików z przestrzeniami w skryptach bash
Rozmieszczone, ale nie łuszczące się
Pokorna nazwa pliku
Wszystko przechowywane na twoim komputerze twardy dysk musi mieć nazwę. Bez nazwy żadne pliki nie istniałyby. Wszystkie aplikacje i demony są uruchamiane, gdy komputer się uruchamia, oraz całe używane oprogramowanie, należy zidentyfikować i przechowywać w systemie plików. Ta identyfikacja to nazwa pliku. ”
To samo dotyczy plików, które tworzysz lub instalujesz. Wszystkie Twoje dokumenty, obrazy i muzyka potrzebują nazw plików. Bez nazw plików żaden z twoich aktywów cyfrowych nie może istnieć. Ponieważ nazwy plików są tak ważne, Linux stara się nałożyć jak najwięcej zasad dotyczących ich składu.
W Linux nazwa pliku może zawierać dowolną postać oprócz cięcia do przodu ”
/
”I zerowa postać,
0x00
. Znak zerowy służy do zaznaczenia końca łańcucha, więc nie może być obecny w samym ciągu, lub Linux obcięłby nazwę pliku w pozycji znaku zerowego. „„
/
„Slash do przodu jest używany jako separator na ścieżkach katalogów.
Nazwy plików są wrażliwe na wielkość, i może trwać do 255 bajtów , w tym zerowy charakter. Ścieżki katalogów mogą mieć do 4096 bajtów, w tym zerowy charakter. Zauważ, że to ich długość w bajty , co może nie być bezpośrednio zrównane postacie . Na przykład 16-bitowe znaki Unicode weź po dwóch bajtach.
Entuzjaści komputerów retro i osoby z długimi wspomnieniami będą wiedzieć, że we wczesnych dniach komputerów osobistych, System operacyjny dysku Microsoft , DOS, był bezsensowny i miał limit nazwy pliku ośmiu znaków, a także trzy charakter rozszerzenie .
Musiałeś być bardzo przemyślany, a czasem kreatywny, kiedy nazwałeś pliki. Dla porównania, wolność, którą mamy dzisiaj, oznacza, że możemy nazwać pliki, co chcemy, nie myśląc o czymkolwiek innym niż opis, który tworzymy dla tego pliku.
Ale dzięki nazwom plików, co najczęściej nas wyprowadza, to nie postacie, które pisamy, to przestrzenie między nimi.
Dlaczego przestrzenie w nazwach plików Linux są ból
Skorupy takie jak Bash będą interpretować rozdzielony przestrzeń ciąg słów jako indywidualne argumenty poleceń, a nie jeden argument. Oto przykład, używając
dotykać
Do
Utwórz nowy plik
nazywany „My New File.txt”.
Jak możemy zobaczyć,
LS
Pokazuje nam, że utworzone są trzy pliki, jeden o nazwie „My”, inny o nazwie „nowy”, a jeszcze jeden o nazwie „File.txt”.
Zwróć uwagę
dotykać
Nie narzekałem ani nie wrzucił błędu. Wykonuje to, co według nas prosimy. Więc cicho zwraca nas do wiersza poleceń. Jeśli nie jesteśmy zmotywowani do sprawdzenia, nie będziemy wiedzieć, że rzeczy nie minęły zgodnie z planem.
Aby utworzyć żądany plik, musimy zacytować lub uciec.
Jak cytować i uciec od przestrzeni
Jeśli zacytujemy całą nazwę pliku,
dotykać
wie, że musi traktować cytowany tekst jako pojedynczy argument.
Tym razem otrzymujemy pojedynczy plik, którego oczekujemy.
Możemy uzyskać ten sam wynik, jeśli użyjemy postaci backslash „
\
„Aby uciec od przestrzeni. „Uciekając” przestrzenie, które nie są traktowani jako postacie specjalne - to znaczy separatory argumentów - są uważane za zwykłe stare przestrzenie.
Działa to, ale uciekające przestrzenie sprawia, że pisanie nazwy plików wolniejsze i podatne na błędy. Rzeczy mogą być naprawdę brzydkie, jeśli masz w nich nazwy katalogów z przestrzeniami.
To polecenie kopiuje pojedynczy plik tekstowy z katalogu o nazwie „Dir One” do katalogu o nazwie „Dir Two” i zapisuje kopię jako plik bak. I to dość prosty przykład.
Jak rozwiązać problem przestrzeni u jego źródła
Jeśli są to twoje własne pliki, możesz podjąć decyzję o zasadach, aby nigdy nie korzystać z przestrzeni i utworzyć (lub Zmiana nazwy masowej ) Takie nazwy plików.
Trzeba przyznać, że jest to solidne rozwiązanie, ale wciąż jest brzydkie. Istnieją lepsze opcje, takie jak korzystanie z dystansów ”
-
”Lub podkreśla„
_
„Oddzielić twoje słowa.
Oba będą ominąć problem i są czytelne. Jeśli nie chcesz dodawać dodatkowych znaków do swoich nazw plików, możesz użyć Camelcase Aby Twoje nazwy plików były czytelne, tak:
Rozszerzenie zakładki ułatwia przestrzenie
Oczywiście przyjęcie konwencji nazewnictwa i trzymanie się jej pomoże tylko wtedy, gdy masz do czynienia z własnymi plikami. Pliki, które pochodzą z dowolnego miejsca, raczej nie będą przestrzegać przyjętych konwencji nazewnictwa.
Możesz użyć rozszerzenia TAB, aby pomóc Ci dokładnie „wypełnić” nazwy plików dla nas. Powiedzmy, że chcemy
usuwać
plik bak, który stworzyliśmy w „Dir Two”, używając
Rm
.
Zaczynamy od wpisania „RM Dir”, ponieważ używamy
Rm
Polecenie i wiemy, że nazwa katalogu zaczyna się od „Dir”.
Naciśnięcie klawisza „Tab” powoduje skanowanie BASH w poszukiwaniu dopasowań w bieżącym katalogu.
Istnieją dwa katalogi, które zaczynają się od „Dir”, aw obu przypadkach następna postać jest przestrzeń. Więc Bash dodaje postać odwrotnego „
\
”I przestrzeń. Bash czeka, aż zapewnimy następną postać. Potrzebuje następnego znaku, aby rozróżnić dwa możliwe dopasowania w tym katalogu.
Wpiszymy „T” dla „dwóch”, a następnie naciśniemy „Tab”.
Bash uzupełnia dla nas nazwę katalogu i czeka, aż wpiszmy początek nazwy pliku.
W tym katalogu mamy tylko jeden plik, więc wpisanie pierwszej litery nazwy pliku „M” wystarczy, aby Bash znać, z którego pliku chcemy użyć. Wpisywanie „M” i naciśnięcie „Tab” uzupełnia dla nas nazwę pliku, a „Enter” wykonuje całe polecenie.
Rozszerzenie TAB ułatwia upewnienie się, że masz odpowiednie nazwy plików, a także przyspiesza nawigację i pisanie na linii poleceń w ogóle.
POWIĄZANY: Użyj wypełnienia TAB, aby szybciej wpisać polecenia w dowolnym systemie operacyjnym
Jak używać nazw plików z przestrzeniami w skryptach bash
Nic dziwnego Skrypty Mają dokładnie takie same problemy z przestrzeniami w nazwach plików, jak wiersz poleceń. Jeśli przekazujesz nazwę pliku jako zmienną, upewnij się, że zacytujesz nazwę zmiennej.
Ten mały skrypt sprawdza bieżący katalog plików, które pasują do wzoru pliku „*.txt” i przechowuje je w zmiennej o nazwie
FILE_LIST
.
A
Do
pętla
służy do wykonania prostej akcji na każdym z nich.
Skopiuj ten tekst do edytora i zapisz go do pliku o nazwie „Files.sh”. Następnie użyj
.
Chmod
Komenda
Aby uczynić go wykonywaniem.
W tym katalogu mamy kilka plików. Jeden ma prostą nazwę pliku, a pozostałe dwa używają podkreślenia „
_
”Lub kaseta„
-
”Zamiast przestrzeni. To właśnie widzimy, gdy uruchamiamy skrypt.
To wydaje się ładnie działać. Ale zmieńmy pliki w katalogu dla plików zawierających przestrzenie w ich nazwach.
Każde słowo w każdej nazwie pliku jest obsługiwane tak, jakby było to sama nazwa pliku, więc skrypt się nie powiedzie. Ale wszystko, co musimy zrobić, aby skrypt obsługiwał przestrzenie w nazwach plików
$ plik
zmienna wewnątrz
Do
pętla.
Zauważ, że dolara podpisuje „
$
”Jest w cytatach. Wprowadziliśmy tę zmianę i zapisaliśmy ją w pliku skryptu „Files.sh”. Tym razem nazwy plików są obsługiwane poprawnie.
POWIĄZANY: Jak przetwarzać linię pliku po linii w skrypcie Bash Linux
Rozmieszczone, ale nie łuszczące się
Unikanie przestrzeni we własnych nazwach plików zabierze Cię tylko do tej pory. Jest nieuniknione, że napotkasz pliki z innych źródeł z nazwami zawierającymi przestrzenie. Na szczęście, jeśli chcesz obsłużyć te pliki w wierszu poleceń lub w skryptach, istnieją łatwe sposoby na to.