Jeśli nie sortuje według nazwy bez żadnych argumentów, możesz chcieć sprawdzić, czy ls ma alias do czegoś innego, lub po prostu wywołać go przy użyciu pełnej ścieżki, co wyeliminowałoby wszelkie istniejące aliasy.
tvanfosson
gnu-coreutils ls sortuje domyślnie. Jakiego systemu używasz (jak pytali inni)
Nick Fortescue
Czy na pewno pytasz o sortowanie według nazwy, a nie typu (tj. Najpierw katalog, potem pliki)?
curtisk
Wielkie litery występują przed małymi literami, więc plik Z znajduje się przed plikiem a ... jak mogę to naprawić?
ArtOfWarfare
Strona podręcznika mówi „posortowane oddzielnie i w porządku leksykograficznym”. Pliki są sortowane według pierwszego znaku: numeryczne [0..9] i WIELKIE znaki [A..Z] i dolne znaki [a..z]
Gürol Canbek
Odpowiedzi:
131
Mój ls sortuje domyślnie według nazwy. Co widzisz?
man ls stwierdza:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.:
Czy istnieje sposób na sortowanie plików w ten sposób: ls | sort -n1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Jak widać 2.10.15 przed 2.10.2 .
BBK,
Zajmuję się programowaniem na Androida na urządzeniu Pidion, a ls nie sortuje automatycznie, więc to było bardzo pomocne! Jedynym problemem jest to, że wygląda na to, że sortuje miękkie linki, ale z jakiegoś powodu nie sortuje plików
Mitch
Na komputerze Mac wygląda na to, że drugie polecenie można skrócić do ls -1r.
Ash Ryan Arnwine
4
@BBK sort -V posortuje według numerów wersji, więc otrzymasz .. 2.10.2; 2.10.15; .. from man sort .. --sort = WORD posortuje według WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
mosh
35
lsfrom domyślnie coreutilswykonuje sortowanie z uwzględnieniem ustawień regionalnych i dlatego w niektórych przypadkach może dawać zaskakujące wyniki (na przykład %foosortuje między bari quuxw LANG=en_US). Jeśli chcesz sortować ASCIIbetical, użyj
LANGnie znając zachowania sortowania, ten post bardzo mi pomógł!
yurenchen
U mnie to też zadziałało. czy mógłbyś to rozwinąć? Dlaczego wygląda inaczej?
Kostas
1
Ta dawka działa, ale jest wyświetlana ?dla każdego znaku innego niż ASCII, gdy wyjście jest terminalem (zła funkcja ls sprawdza, czy wychodzi do terminala, działa podczas potoku). Możesz to "naprawić" za pomocą pipingu do cat, użyć C.UTF-8ustawień regionalnych (jeśli twój system je obsługuje) i / lub użyć -bflagi. Nawet lepiej, wcale nie używaj ls, lepiej używaj ''
12431234123412341234123
Pomogło mi to odkryć, że problem polegał na tym, że niektóre z moich nazw plików zawierały łącznik (-), a niektóre półpauza (-). lssortuje łączniki przed pół kreskami.
Jamy Mahabier
17
Piękno narzędzi * nix polega na tym, że można je łączyć:
ls -l | sort -k9,9
Wynik ls -lbędzie wyglądał następująco
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Więc 9,9sortujesz kolumny 9do kolumny 9, będącej nazwami plików. Musisz podać, gdzie się zatrzymać, czyli w tym przypadku jest to ta sama kolumna. Kolumny zaczynają się od 1.
Ponadto, jeśli chcesz zignorować duże / małe litery, dodaj --ignore-casedo polecenia sortowania.
Okazało się, że oznacza to sortowanie kolumny 9do tej samej kolumny 9. Normalne lswyjście wygląda drwx------ 8 999 user 4.0K Feb 5 2017 file.txttak:, więc kolumna 9 to nazwy plików. Jeśli chcesz zignorować wielkość liter, użyj opcji --ignore-casesort.
To nie zawsze jest prawdą. Nie znam dokładnie okoliczności, które sprawiają, że to nieprawda, ale na moim komputerze z systemem Ubuntu 12.04 dane wyjściowe ls są sortowane alfabetycznie (ignorując wielkość liter).
Patrick James McDougle,
Dobry chwyt! Wygląda na to, że zamawia go na podstawie kodu ASCII. Po dużych literach następuje małe litery ..
Kent Pawar
1
Zauważyłem, że mój MacOS sortuje najpierw cyfry, potem wielkie litery, potem podkreślenie, a potem małe litery. To zabawne, że nie rozróżniają wielkości liter. Z drugiej strony, mój Debian rozróżnia małe i duże litery, ale sortuje je bez uwzględnienia, chyba że jest remis, wtedy małe litery wygrywają! Przykład: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82
Ja też mam MAC. byłem rozczarowany, widząc sortowanie typu A, Z, a, z. Jestem tutaj, ponieważ wolę mieć A, a, Z, a. dzięki za wskazówkę. wypróbuje normaltutaj rozwiązania.
nyxee
8
Pliki różniące się tylko ciągiem liczbowym mogą być sortowane według tej liczby pod warunkiem, że jest poprzedzona separatorem.
W takim przypadku można użyć następującej składni:
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
Odpowiedzi:
Mój ls sortuje domyślnie według nazwy. Co widzisz?
man ls
stwierdza:List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:źródło
ls
nie sortuje, jeśli-c1
określono: czy istnieje sposób, aby to zrobić? (--sort=name
nie wydaje się działać)ls -la
, widzę.bashrc - can - .config - Downloads - .local - tmp
.bashrc - .config - .local - Downloads - can - tmp
Aby uzyskać coś prostego, możesz połączyć ls z sort . Tylko lista nazw plików:
ls -1 | sortować
Aby posortować je w odwrotnej kolejności:
ls -1 | sort -r
źródło
ls | sort -n
1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Jak widać 2.10.15 przed 2.10.2 .ls -1r
.ls
from domyślniecoreutils
wykonuje sortowanie z uwzględnieniem ustawień regionalnych i dlatego w niektórych przypadkach może dawać zaskakujące wyniki (na przykład%foo
sortuje międzybar
iquux
wLANG=en_US
). Jeśli chcesz sortować ASCIIbetical, użyjźródło
LANG
nie znając zachowania sortowania, ten post bardzo mi pomógł!?
dla każdego znaku innego niż ASCII, gdy wyjście jest terminalem (zła funkcja ls sprawdza, czy wychodzi do terminala, działa podczas potoku). Możesz to "naprawić" za pomocą pipingu do cat, użyćC.UTF-8
ustawień regionalnych (jeśli twój system je obsługuje) i / lub użyć-b
flagi. Nawet lepiej, wcale nie używajls
, lepiej używaj ''ls
sortuje łączniki przed pół kreskami.Piękno narzędzi * nix polega na tym, że można je łączyć:
Wynik
ls -l
będzie wyglądał następującoWięc
9,9
sortujesz kolumny9
do kolumny9
, będącej nazwami plików. Musisz podać, gdzie się zatrzymać, czyli w tym przypadku jest to ta sama kolumna. Kolumny zaczynają się od1
.Ponadto, jeśli chcesz zignorować duże / małe litery, dodaj
--ignore-case
do polecenia sortowania.źródło
-k9,9
znaczy?9
do tej samej kolumny9
. Normalnels
wyjście wyglądadrwx------ 8 999 user 4.0K Feb 5 2017 file.txt
tak:, więc kolumna 9 to nazwy plików. Jeśli chcesz zignorować wielkość liter, użyj opcji--ignore-case
sort.UWAGA: „a” pojawia się PO „Z”:
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
źródło
normal
tutaj rozwiązania.Pliki różniące się tylko ciągiem liczbowym mogą być sortowane według tej liczby pod warunkiem, że jest poprzedzona separatorem.
W takim przypadku można użyć następującej składni:
Przykład:
źródło
Ze strony podręcznika (dla bash ls):
źródło
which ls
odniesiesz sukces, nawet gdyby bash miał wbudowany ls. Raczej zróbbuiltin ls
bash i otrzymaj błąd.which
zawsze zwraca ścieżkę. Służytype ls
do określania, co myśli powłokals
(wbudowane, funkcyjne, wykonywalne).ls
Narzędzie powinno być zgodne z IEEE Std 1003.1-2001 (POSIX.1
), który stanowi:źródło
Sprawdź, czy w
.bashrc
pliku nie ma aliasów.źródło
alias
aby sprawdzić wszystkie aktualne aliasy.ls -X działa w tym celu, na wypadek gdybyś aliasował ls do bardziej użytecznego ustawienia domyślnego.
źródło
źródło