Puoi ordinare un elenco di ls per nome?
Puoi ordinare un elenco di ls per nome?
Risposte:
Il mio ls ordina per nome per impostazione predefinita. Cosa stai vedendo?
man ls
stati:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
ls
non ordina se -c1
specificato: c'è un modo per ottenerlo? ( --sort=name
non sembra funzionare)
ls -la
, vedo .bashrc - can - .config - Downloads - .local - tmp
.bashrc - .config - .local - Downloads - can - tmp
Per qualcosa di semplice, puoi combinare ls con sort . Solo per un elenco di nomi di file:
ls -1 | ordinare
Per ordinarli in ordine inverso:
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; Come puoi vedere 2.10.15 prima del 2.10.2 .
ls -1r
.
ls
da coreutils
esegue un locale-consapevole ordinamento di default, e quindi può produrre risultati sorprendenti in alcuni casi (ad esempio, %foo
ordinerà tra bar
e quux
in LANG=en_US
). Se vuoi un ordinamento ASCIIbetico, usa
LANG=C ls
LANG
ilfnuence il comportamento di ordinamento, questo post mi aiuta molto!
?
per ogni carattere non ASCII quando l'output è un terminale (una cattiva funzionalità di ls controlla se esce su un terminale, funziona durante il piping). Puoi "aggiustarlo" con piping a cat, usare il C.UTF-8
locale (se il tuo sistema lo supporta) e / o usare il -b
flag. Ancora meglio, non usare ls
affatto, meglio usare `
ls
ordina i trattini prima dei trattini.
Il bello degli strumenti * nix è che puoi combinarli:
ls -l | sort -k9,9
L'output di ls -l
sarà simile a questo
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Quindi 9,9
, ordina la colonna 9
fino alla colonna 9
, essendo i nomi dei file. Devi fornire dove fermarti, che in questo caso è la stessa colonna. Le colonne iniziano con 1
.
Inoltre, se vuoi ignorare le maiuscole / minuscole, aggiungi --ignore-case
al comando di ordinamento.
-k9,9
significa?
9
fino alla stessa colonna 9
. Un ls
output normale è simile a questo drwx------ 8 999 user 4.0K Feb 5 2017 file.txt
:, quindi la colonna 9 è i nomi dei file. Se vuoi ignorare il caso, usa --ignore-case
su sort.
AVVISO: "a" viene DOPO "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normal
soluzioni qui.
I file che differiscono solo da una stringa numerica possono essere ordinati su questo numero a condizione che sia preceduto da un separatore.
In questo caso, è possibile utilizzare la seguente sintassi:
ls -x1 file | sort -t'<char>' -n -k2
Esempio:
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
Dalla pagina man (per bash ls):
Ordina le voci in ordine alfabetico se nessuna di -cftuSUX né --sort.
which ls
riusciresti anche se bash avesse un ls incorporato. Piuttosto, fai builtin ls
in bash e ottieni un errore.
which
restituisce sempre un percorso. Da usare type ls
per determinare cosa pensa ls
sia la shell (built-in, funzione, eseguibile).
L' ls
utilità deve essere conforme allo standard IEEE 1003.1-2001 ( POSIX.1
) che afferma:
22027: ordina separatamente gli operandi directory e non directory in base alla sequenza di confronto nella locale corrente.
26027: Per impostazione predefinita, il formato non è specificato, ma l'output deve essere ordinato alfabeticamente in base al nome del simbolo:
- Nome della libreria o dell'oggetto, se è specificato −A
- Nome del simbolo
- Tipo di simbolo
- Valore del simbolo
- La dimensione associata al simbolo, se applicabile
Controlla il tuo .bashrc
file per gli alias.
alias
per verificare tutti gli alias correnti.
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 --