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.:
lsnon ordina se -c1specificato: c'è un modo per ottenerlo? ( --sort=namenon 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.
lsda coreutilsesegue un locale-consapevole ordinamento di default, e quindi può produrre risultati sorprendenti in alcuni casi (ad esempio, %fooordinerà tra bare quuxin LANG=en_US). Se vuoi un ordinamento ASCIIbetico, usa
LANG=C ls
LANGilfnuence 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-8locale (se il tuo sistema lo supporta) e / o usare il -bflag. Ancora meglio, non usare lsaffatto, meglio usare `
lsordina i trattini prima dei trattini.
Il bello degli strumenti * nix è che puoi combinarli:
ls -l | sort -k9,9
L'output di ls -lsarà 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 9fino 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-caseal comando di ordinamento.
-k9,9significa?
9fino alla stessa colonna 9. Un lsoutput 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-casesu sort.
AVVISO: "a" viene DOPO "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normalsoluzioni 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 lsriusciresti anche se bash avesse un ls incorporato. Piuttosto, fai builtin lsin bash e ottieni un errore.
whichrestituisce sempre un percorso. Da usare type lsper determinare cosa pensa lssia la shell (built-in, funzione, eseguibile).
L' lsutilità 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 .bashrcfile per gli alias.
aliasper 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 --