Bagaimana cara membuat `ls` menampilkan ukuran file dalam megabita?

442

Perintah apa yang saya perlukan untuk Linux lsuntuk menunjukkan ukuran file dalam MB?

Paul Sheldrake
sumber

Jawaban:

513

ls -l --block-size=Makan memberi Anda daftar format panjang (diperlukan untuk benar-benar melihat ukuran file) dan membulatkan ukuran file hingga MiB terdekat.

Jika Anda menginginkan MB (10 ^ 6 byte) daripada unit MiB (2 ^ 20 byte), gunakan --block-size=MBsaja.

Jika Anda tidak ingin Msufiks melekat pada ukuran file, Anda dapat menggunakan sesuatu seperti --block-size=1M. Terima kasih Stéphane Chazelas karena menyarankan ini.

Jika Anda hanya ingin ukuran file dalam satuan "masuk akal", daripada megabita secara khusus , maka Anda dapat menggunakan -lhuntuk mendapatkan daftar format panjang dan presentasi ukuran file yang dapat dibaca manusia . Ini akan menggunakan unit ukuran file untuk menjaga ukuran file disajikan dengan sekitar 1-3 digit (sehingga Anda akan melihat ukuran file seperti 6.1K, 151K, 7.1M, 15M, 1.5Gdan sebagainya.

The --block-sizeparameter dijelaskan dalam halaman manual untuk ls; man lsdan cari SIZE. Ini memungkinkan untuk unit selain MB / MiB juga, dan dari kelihatannya (saya tidak mencobanya) ukuran blok yang sewenang-wenang juga (sehingga Anda bisa melihat ukuran file sebagai jumlah blok 429-byte jika Anda ingin untuk).

Perhatikan bahwa kedua --block-sizedan -hekstensi GNU di atas Open Groupls , jadi ini mungkin tidak bekerja jika Anda tidak memiliki userland GNU (yang kebanyakan instalasi Linux lakukan). The lsdari GNU Coreutils 8.5 tidak mendukung --block-size dan -h seperti dijelaskan di atas. Terima kasih kepada kojiro karena menunjukkan ini.

sebuah CVn
sumber
11
Perbedaan mungkin perlu diperhatikan: --block-size=Mmenyebabkan Msufiks ditampilkan di sebelah ukuran, dan Anda dapat menggunakannya --block-size=1Muntuk menghilangkannya. Mungkin perlu disebutkan juga bahwa Anda memerlukan GNU ls untuk itu (sebagian besar sistem Linux yang tidak tertanam akan memiliki GNU ls).
Stéphane Chazelas
2
Apakah ini GNU ls? Standarls tidak memiliki argumen seperti itu. Dengan ekstensi xsi ls memiliki -sbendera, yang membuatnya melaporkan jumlah blok, tetapi tidak ada bendera standar --block-size.
kojiro
2
@kojiro GNU ls memang memiliki --block-sizecoreutils 8.5, yang diinstal pada sistem Squian Debian saya. Karena pertanyaannya secara eksplisit untuk Linux dan tidak menentukan hal lain, saya akui saya menganggap userland berpusat di sekitar GNU coreutils. Saya telah memperbarui jawaban untuk memperjelas ini. (Selain itu, Open Group tampaknya juga tidak memiliki -h. :))
CVn
2
@EmanuelBerg, 1000 ^ 7 (10 ^ 21) lebih besar dari 2 ^ 64 (yaitu ~ 10 ^ 19.27)
Stéphane Chazelas
4
@ Tom Seperti yang tertulis di paragraf terakhir dari jawaban, --block-sizeadalah ekstensi GNU. Saya menduga bahwa Mac OS X tidak menggunakan GNU ls.
CVn
385

ls -lh memberikan ukuran file yang dapat dibaca manusia, format panjang.

Ia menggunakan sufiks k, M, G, dan T (atau tidak ada sufiks untuk byte) sesuai kebutuhan sehingga jumlahnya tetap kecil, misalnya 1.4Katau 178M.

-h adalah ekstensi GNU coreutils, bukan POSIX dasar.

Perhatikan bahwa ini tidak menjawab pertanyaan persis seperti yang ditanyakan. Jika Anda ingin ukuran ketat di MiB bahkan untuk file kecil atau raksasa, jawaban Michael Kjörling melakukan itu untuk GNU coreutilsls .

Sirex
sumber
4
Itu akan mencetak ukuran file dalam GB untuk sesuatu yang lebih besar dari hanya di bawah 1,0 GiB (saya percaya).
CVn
5
@ MichaelKjörling Saya tidak melihatnya sebagai jawaban yang buruk (walaupun saya tidak membenarkan). Terkadang OP tidak menjawab pertanyaan seperti yang seharusnya, jadi mungkin saja mereka hanya menginginkan hasil yang dapat dibaca oleh manusia dan sebaliknya menyatakannya sebagai "dalam MB".
Dason
5
Terpilih. "Ini tidak menjawab pertanyaan (MB)" adalah pernyataan yang benar-benar valid tetapi jawaban ini hanya meningkatkan kegunaan halaman SO ini karena jawaban ini dalam konteks yang sama. Saya hanya datang ke halaman ini untuk mencari solusi untuk persyaratan "tunjukkan tanggal dalam bentuk yang dapat dibaca manusia" yang umum dan hjauh lebih mudah untuk ditulis daripada--block-size=M
Ejaz
6
"terbaca oleh manusia" agak ironis. Siapa yang menggunakan ls -lsama sekali jika bukan manusia? : p
phil294
2
@chengyang: parsing ls -loutput adalah cara yang salah untuk melakukan sesuatu, 99% dari waktu. unix.stackexchange.com/questions/128985/why-not-parse-ls . 1% itu murah hati, dan cukup terbatas pada one-liner yang Anda tulis secara interaktif untuk sekali pakai, bukan skrip yang akan Anda gunakan berulang kali pada nama file yang tidak dikenal.
Peter Cordes
46

ls -lhS urutkan berdasarkan ukuran, dalam format yang dapat dibaca manusia

Jaciefan
sumber
2
Silakan lihat komentar pada ls -lhjawaban untuk alasan mengapa ini tidak benar-benar menjawab pertanyaan.
Alexander Batischev
2
Tidak hanya ini tidak benar-benar menjawab pertanyaan (seperti yang dibahas dalam komentar untuk jawaban Sirex) tetapi juga tidak menambahkan apa pun yang relevan dengan jawaban yang ada: OP tidak bertanya tentang urutan penyortiran.
CVn
6
hanya berpikir menyortir berdasarkan ukuran adalah tindak lanjut potensial yang mungkin dimiliki orang, setidaknya itulah yang saya miliki
jaciefan
1
Dalam hal ini orang harus melihat Cara daftar semua file yang dipesan berdasarkan ukuran yang persis tentang skenario itu.
CVn
Saya percaya ini menjadi tambahan yang layak untuk jawaban terutama karena ia menguraikan jawaban Sirex
Dowlers
9

Dan ini adalah opsi untuk mendaftar semuanya dalam urutan direktori dengan ukuran file (masih dapat dibaca manusia) naik.

ls -lSrh
Marcos Placona
sumber
Apakah Anda pikir komentar dari jawaban lain yang tidak menjawab pertanyaan , juga berlaku untuk yang ini?
Dan Dascalescu
@DanDascalescu No. Komentar itu tidak membantu, 2 jawaban yang dimaksud adalah. Hanya 2 sen saya sebagai peretasan yang mencoba mencari tahu cara mendaftar ukuran file dalam sistem linux yang tidak ia ketahui.
Dowlers