Dì a `ls` di ordinare in base a normali codici ASCII, non" in modo intelligente "


13

Ho un paio di file e lsli ordina in questo modo:

a
_b
c

ma voglio avere

_b
a
c

Come posso fare ciò?


2
Potrei chiedere perché?
RolandiXor

2
Uso il trattino basso per indicare directory speciali che devono andare in cima. Nella cartella dei miei progetti, ho proj_a, proj_b e _old_projects. Non serve a niente se questa cartella si trova all'interno degli o-project.
Martin Ueding,

Risposte:


9

Come comando unico puoi fare questo:

LC_COLLATE=C ls

Oppure puoi aggiungere export LC_COLLATE="C"al tuo .bashrc per renderlo permanente (potrebbe avere risultati inaspettati l'ordinamento altrove).

Maggiori informazioni sui forum di Ubuntu .


1
Immagino che mi limiterò a farlo, in modo che non abbia effetti collaterali.
Martin Ueding,

Questo non funziona per me. Ho capito -> paste.pocoo.org/show/403333 (è tedesco ma non dovrebbe importare)
dAnjou,

2
@dAnjou LC_COLLATE=Cls imposta il tradizionale ordinamento POSIX, che è in base a ASCII in cui le lettere maiuscole precedono il trattino basso. Per ordinare i caratteri di sottolineatura prima delle maiuscole dovresti andare sotto il cofano e creare una definizione locale personalizzata sotto / usr / share / i18n / locales.
misterben,

2
Questo potrebbe aver funzionato in passato, ma non funziona su Ubuntu 12.04.
Mikel,

1
A partire da Ubuntu 14.04, LC_COLLATE=C lsnon funziona, ma LC_ALL=C lsfunziona.
jwodder,

6

Nel caso in cui non ci sia un modo integrato per farlo, è possibile utilizzare un semplice sostituto per sort:

#!/usr/bin/env python

import sys

for i in sorted(sys.stdin):
    sys.stdout.write(i)

Salvalo, ad esempio, su /bin/pysorte rendilo eseguibile ( sudo cp whatever.py /bin/pysorte sudo chmod a+x /bin/pysort), ed eseguilo come ls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c

1
Probabilmente lo ~/bininserirò ma un bel fallback. Probabilmente è meglio usare il globbing all'interno di Python poiché l'output di ls potrebbe essere strano se un nome file contiene una nuova riga.
Martin Ueding l'

1

sarebbe ls | sortnon fare esattamente quello che ti serve?


1
no, lo ordina come "a _b c"
Stefano Palazzo

1
no! e l'ordinamento inoltre non ha un'opzione per questo :-)
Rinzwind

2
È strano che l'ordinamento abbia tanti modi di ordinamento speciali ma non quello "usa il valore ASCII" uno ...
Martin Ueding,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.