Czy możesz sortować listę ls według nazwy?
Czy możesz sortować listę ls według nazwy?
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.
:
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
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ślnie coreutils
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ędzy bar
i quux
w LANG=en_US
). Jeśli chcesz sortować ASCIIbetical, użyj
LANG=C ls
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żywaj ls
, lepiej używaj ''
ls
sortuje łączniki przed pół kreskami.
Piękno narzędzi * nix polega na tym, że można je łączyć:
ls -l | sort -k9,9
Wynik ls -l
bę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,9
sortujesz kolumny 9
do 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-case
do polecenia sortowania.
-k9,9
znaczy?
9
do tej samej kolumny 9
. Normalne ls
wyjście wygląda drwx------ 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
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:
ls -x1 file | sort -t'<char>' -n -k2
Przykład:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
Ze strony podręcznika (dla bash ls):
Sortuj wpisy alfabetycznie, jeśli nie ma opcji -cftuSUX ani --sort.
which ls
odniesiesz sukces, nawet gdyby bash miał wbudowany ls. Raczej zrób builtin ls
bash i otrzymaj błąd.
which
zawsze zwraca ścieżkę. Służy type ls
do określania, co myśli powłoka ls
(wbudowane, funkcyjne, wykonywalne).
ls
Narzędzie powinno być zgodne z IEEE Std 1003.1-2001 ( POSIX.1
), który stanowi:
22027: będzie sortować oddzielnie argumenty katalogowe i niekatalogowe, zgodnie z kolejnością zestawiania w bieżących ustawieniach regionalnych.
26027: Domyślnie format jest nieokreślony, ale dane wyjściowe powinny być posortowane alfabetycznie według nazwy symbolu:
- Nazwa biblioteki lub obiektu, jeśli podano -A
- Nazwa symbolu
- Typ symbolu
- Wartość symbolu
- Rozmiar powiązany z symbolem, jeśli dotyczy
Sprawdź, czy w .bashrc
pliku nie ma aliasów.
alias
aby sprawdzić wszystkie aktualne aliasy.
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 --