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.:
lsnie sortuje, jeśli -c1określono: czy istnieje sposób, aby to zrobić? ( --sort=namenie 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.
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
LANG=C ls
LANGnie 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-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 ''
lssortuje łączniki przed pół kreskami.
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.
-k9,9znaczy?
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.
UWAGA: „a” pojawia się PO „Z”:
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normaltutaj 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 lsodniesiesz sukces, nawet gdyby bash miał wbudowany ls. Raczej zrób builtin lsbash i otrzymaj błąd.
whichzawsze zwraca ścieżkę. Służy type lsdo określania, co myśli powłoka ls(wbudowane, funkcyjne, wykonywalne).
lsNarzę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 .bashrcpliku nie ma aliasów.
aliasaby 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 --