Beri tahu `ls` untuk mengurutkan berdasarkan kode ASCII biasa, bukan" dengan cerdas "

13

Saya punya beberapa file dan lsmengurutkannya seperti ini:

a
_b
c

tapi aku ingin memilikinya

_b
a
c

Bagaimana saya bisa melakukan itu?

Martin Ueding
sumber
2
Bolehkah saya bertanya mengapa?
RolandiXor
2
Saya menggunakan garis bawah untuk menunjukkan direktori khusus yang perlu ke atas. Dalam folder proyek saya, saya punya proj_a, proj_b dan _old_projects. Tidak ada gunanya jika folder ini berada dalam proyek-o.
Martin Ueding

Jawaban:

9

Sebagai perintah satu kali, Anda dapat melakukan ini:

LC_COLLATE=C ls

Atau Anda dapat menambahkan export LC_COLLATE="C"ke .bashrc Anda untuk membuatnya permanen (mungkin ada hasil yang tidak terduga menyortir di tempat lain).

Informasi lebih lanjut tentang forum Ubuntu .

misterben
sumber
1
Saya kira saya hanya akan alias dengan itu, sehingga tidak memiliki efek samping.
Martin Ueding
Ini tidak berhasil untuk saya. Saya mendapatkan ini -> paste.pocoo.org/show/403333 (ini Jerman tapi tidak masalah)
dAnjou
2
@dAnjou LC_COLLATE=Cls menetapkan urutan penyortiran POSIX tradisional, yaitu oleh ASCII di mana huruf besar muncul sebelum garis bawah. Untuk memiliki tanda garis bawah sebelum huruf besar Anda harus mendapatkan di bawah kap dan membuat definisi lokal kustom di / usr / share / i18n / locales.
misterben
2
Ini mungkin berhasil di masa lalu, tetapi tidak berfungsi di Ubuntu 12.04.
Mikel
1
Pada Ubuntu 14.04, LC_COLLATE=C lstidak berfungsi, tetapi LC_ALL=C lstidak.
jwodder
6

Kalau-kalau tidak ada cara bawaan untuk melakukan ini, Anda bisa menggunakan pengganti sederhana untuk sort:

#!/usr/bin/env python

import sys

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

Simpan, misalnya, di /bin/pysortdan buat itu dapat dieksekusi ( sudo cp whatever.py /bin/pysortdan sudo chmod a+x /bin/pysort), dan jalankan sebagai ls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c
Stefano Palazzo
sumber
1
Saya mungkin akan memasukkannya ke dalam ~/bintetapi mundur bagus. Mungkin lebih baik menggunakan globbing di dalam python karena output dari ls mungkin aneh jika sebuah nama file berisi baris baru.
Martin Ueding
1

ls | sorttidak akan melakukan apa yang Anda butuhkan?

Philippe De Brouwer
sumber
1
tidak, itu semacam "a _b c"
Stefano Palazzo
1
tidak! dan urutkan juga belum mendapat opsi untuk ini :-)
Rinzwind
2
Sungguh aneh bahwa sort memiliki begitu banyak cara penyortiran khusus tetapi bukan "gunakan nilai ASCII" ...
Martin Ueding