Dlaczego ten symbol wieloznaczny nie działa w oczekiwany sposób?


11

Na moim folderze użytkownika, jak mam foldery D ropbox, D ocuments, D ownloads & d UMP.

ls a*powinien wyświetlić listę wszystkich plików, których nazwa zaczyna się od a. Dobrze? Ale kiedy wydaje polecenie ls d*, zamiast po prostu wyświetlać dump, pokazuje mi katalog ls zrzutu. A kiedy podam komendę as ls D*, wyświetla ona ls wszystkich foldów zaczynających się na D

Więc jakiej części mi brakowało w zrozumieniu?

Edycja: dołączanie zrzutu ekranu Zrzut ekranu ls

Odpowiedzi:


17

Według strony podręcznika bash:

bash skanuje każde słowo w poszukiwaniu znaków *,? i [. Jeśli pojawi się jeden z tych znaków, to słowo jest traktowane jako wzór i zastępowane alfabetycznie uporządkowaną listą nazw plików pasujących do wzorca

i z węzła informacyjnego dla ls

Program `ls 'wyświetla informacje o plikach (dowolnego typu, w tym katalogach). Opcje i argumenty pliku można jak zwykle mieszać dowolnie.

W przypadku nieopcyjnych argumentów wiersza polecenia, które są katalogami, domyślnie „ls” wyświetla zawartość katalogów, nie rekurencyjnie, i pomija pliki o nazwach rozpoczynających się od „.”. W przypadku innych argumentów, które nie są opcjami, domyślnie `ls 'wyświetla tylko nazwę pliku. Jeśli nie podano żadnych argumentów nie będących opcjami, „ls” wyświetla zawartość bieżącego katalogu.

więc kiedy dajesz ls d*, d * jest rozwijane do posortowanej listy wszystkich nazw plików / katalogów zaczynających się na d. Więc rozkaz staje się

ls dump

a ponieważ zrzut jest nazwą katalogu, więc otrzymujesz listę wszystkich plików w katalogu „zrzut”, ale kiedy dajesz ls D*, D * jest rozwijane do „ Dropbox Dokumentów do pobrania ”, więc polecenie staje się

ls Desktop Documents Downloads Dropbox

a ponieważ wszystkie są katalogami, otrzymujesz listę plików w indywidualnym katalogu. Gdyby w bieżącym katalogu znajdował się plik rozpoczynający się na literę D , byłby wymieniony osobno.


2
Drobne uzupełnienie: gdy jako argument podano więcej niż jeden katalog, ls wyświetla nazwę każdego katalogu przed wyświetleniem jego zawartości. Nie zrobi tego dla pojedynczego katalogu.
— Marcel Stimberg,

Dzięki! To rozwiało moje wątpliwości. Zrobiłem ls p*i pojawił się plik, ponieważ istnieje i A ls P*pokazuje Pictures ogólnodostępnych Folder jak nie ma pliku zaczynając P . A kiedy utworzyłem katalog o nazwie poo , pojawił się onls p*
— Ashfame

7

Zarówno d *, jak i D * wyświetlają listę plików i folderów pasujących odpowiednio do d * i D *, zachowanie jest takie samo, musiał być błąd w teście.

Jeśli chcesz wyświetlić tylko nazwy folderów, a nie zawartość folderu, musisz użyć „-d”:

ls -d D*


0

Jak zasugerowano powyżej, -dopcja jest już dostępna. Dodawanie

alias ld='ls -d'

do mojego ~/.bashrcpliku działa dobrze dla mnie.


3
Za pomocą tego aliasu blokujesz łatwy dostęp ld - The GNU linker, co uniemożliwi OP kompilowanie i łączenie programów. Użyj alias lsd='ls -d'zamiast tego. Przed aliasingiem czegoś, jak foozawsze, type foosprawdź, czy foojest już używany jako nazwa czegoś i zdecyduj, czy wygoda aliasu zastępuje utratę dostępu do poprzedniejfoo
— waltinator
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.