Warna berbeda untuk kisaran KiB di `ls-l`

9

Apakah ada cara waras untuk menyorot kolom ke-4, ke-5, dan ke-6 dari kanan ukuran file ls -l? Maksud saya adalah membuatnya mudah untuk membaca ukuran file baik itu dalam byte, KiBs, atau MiBs. Saya tahu tentang -hbendera, tetapi saya menemukan bahwa harus menafsirkan huruf pada akhirnya lebih rumit daripada hanya melihat dan melihat panjang angka (besarnya). Ini adalah alasan yang sama mengapa mobil balap menggunakan dial analog bukan digital.

Shell target saya adalah Bash. Terima kasih.

EDIT: Saya mencari untuk menyoroti ribuan, sepuluh ribu, dan seratus ribu tempat kolom ukuran. Seperti ini: 123 456 789

dotancohen
sumber
Mungkin ini bisa membantu Anda: unix.stackexchange.com/a/49270/14084
Bernhard
Terima kasih, Bernhard! Saya menggunakan solusi Anda untuk pertanyaan itu setiap hari, saya telah lslmengatasinya dengan beberapa perubahan kecil. Bahkan, jawaban untuk pertanyaan ini akan dikombinasikan dengan teknik Anda di lslalias saya .
dotancohen
@dotancohen Ah, tidak menyadari bahwa itu adalah orang yang sama yang mengajukan pertanyaan, tetapi saya sebenarnya merujuk pada jawaban ls ++ ini di sini :)
Bernhard
Saya melihat. Sayangnya, ls ++ tidak membahas masalah ini.
dotancohen
@Bernhard: Masih perlu beberapa penyesuaian, tetapi lihatlah:grep --color -E -- "$(ls -rtl $@ | tail -n4)|$" <(ls -l $@ | perl -pe 's{^((?:\S+\s+){4}\d*)(\d{3})(?=\d{3})}{$1\e[31;1m$2\e[m}')
dotancohen

Jawaban:

7

Mungkin sesuatu seperti:

ls -l | perl -pe 'BEGIN{@color=(0,2,3,1,5,4)}
  s{((?:\S+\s+){4})(\d+)}{"$1\e[3" . 
  $color[log($2||1)/log(2)/10] . "m$2\e[m"}e'

Untuk warna hitam (atau apa pun warna latar depan default pada terminal Anda) untuk ukuran dari 0 hingga 1023, hijau dari 1k ke 1M, kuning untuk 1M ke 1G, kemudian merah, ungu, biru.

Edit . Berdasarkan persyaratan yang diedit:

ls -l | perl -pe 's{^((?:\S+\s+){4}\d*)(\d{3})(?=\d{3})}
                   {$1\e[31;1m$2\e[m}'
Stéphane Chazelas
sumber
Keren! Saya kira seseorang ingin memiliki alias untuk itu? :)
posdef
Terima kasih. Ini bukan yang saya cari (saya akan mengklarifikasi pertanyaan) tetapi ini tentu membantu dan saya baru saja belajar banyak perl dari itu!
dotancohen
Sangat bagus! Dan terima kasih telah mengajari saya perl!
dotancohen
3

Cara termudah tanpa menginstal perangkat lunak tambahan adalah dengan grep --colorapa pun yang Anda inginkan. Untuk menyorot filesize dari ls output Anda harus menjalankan sesuatu seperti itu (kadang-kadang akan menyoroti ukuran tidak hanya):

ls -l | grep --color '\s\+[0-9]\+\s'

Silakan lihat pertanyaan serupa di SO.

buru-buru
sumber
Terima kasih. Sebenarnya, menyoroti nomornya bukan yang saya cari. Saya sudah mengklarifikasi pertanyaan itu. Bagaimanapun, +1 karena mengajari saya sesuatu yang baru!
dotancohen