Jak sprawić, aby `ls` wyświetlał rozmiary plików w megabajtach?

442

Jakich poleceń potrzebuję, aby Linux lswyświetlał rozmiar pliku w MB?

Paul Sheldrake
źródło

Odpowiedzi:

513

ls -l --block-size=Mda ci długą listę formatów (potrzebną, aby zobaczyć rozmiar pliku) i okrągłe rozmiary plików do najbliższej MiB.

Jeśli chcesz jednostek MB (10 ^ 6 bajtów) zamiast MiB (2 ^ 20 bajtów), użyj --block-size=MBzamiast tego.

Jeśli nie chcesz Mdołączać sufiksu do rozmiaru pliku, możesz użyć czegoś takiego --block-size=1M. Dziękuję Stéphane Chazelas za zasugerowanie tego.

Jeśli chcesz po prostu wielkości plików w „rozsądnych” jednostkach, a nie w megabajtach , możesz użyć -lhdługiej listy formatów i prezentacji rozmiaru pliku czytelnego dla człowieka . Pozwoli to wykorzystać jednostki rozmiaru pliku, aby zachować rozmiary plików prezentowanych około 1-3 cyfr (więc można zobaczyć rozmiary plików, takich jak 6.1K, 151K, 7.1M, 15M, 1.5Gi tak dalej.

--block-sizeParametr jest opisane w manualu do ls; man lsi wyszukaj SIZE. Pozwala również na jednostki inne niż MB / MiB, a na podstawie wyglądu (nie próbowałem tego) również dowolnych rozmiarów bloków (aby można było zobaczyć rozmiar pliku jako liczbę bloków 429 bajtów, jeśli chcesz do).

Należy zauważyć, że zarówno --block-sizei -hsą GNU rozszerzeń na górze Open Grupyls , więc to nie może działać, jeśli nie ma przestrzeni użytkownika GNU (co zrobić większość instalacji systemu Linux). Z lsGNU Coreutils 8.5 obsługuje --block-size i -h, jak opisano powyżej. Dzięki kojiro za zwrócenie na to uwagi.

CVn
źródło
11
Być może warto zauważyć różnicę: --block-size=Mspraw, Maby obok rozmiaru wyświetlał się przyrostek, a możesz --block-size=1Mgo pominąć. Warto również wspomnieć, że do tego potrzebujesz GNU ls (większość niewbudowanych systemów Linux będzie miała GNU ls).
Stéphane Chazelas
2
Czy to byłby GNU ls? Standardls nie ma takiego argumentu. Z rozszerzeniem xsi ls ma -sflagę, która powoduje, że raportuje liczbę bloków, ale nie ma standardowej flagi --block-size.
kojiro
2
@kojiro GNU ls ma --block-sizeod coreutils 8.5, co jest zainstalowane w moim systemie Debian Squeeze. Ponieważ pytanie było wyraźnie skierowane do Linuksa i nie określiło nic innego, przyznam, że założyłem obszar użytkownika skoncentrowany wokół jąder GNU. Zaktualizowałem odpowiedź, aby to wyjaśnić. (Poza tym wydaje się, że Open Group ls też nie ma -h. :))
CVn
2
@EmanuelBerg, 1000 ^ 7 (10 ^ 21) jest większy niż 2 ^ 64 (czyli ~ 10 ^ 19,27)
Stéphane Chazelas
4
@Tom Jak napisano w ostatnim akapicie odpowiedzi, --block-sizejest rozszerzeniem GNU. Podejrzewam, że Mac OS X nie używa GNU ls.
CVn
384

ls -lh daje czytelne dla człowieka rozmiary plików, długi format.

W razie potrzeby używa sufiksów k, M, G i T (lub bez sufiksu dla bajtów), więc liczba pozostaje mała, np . 1.4KLub 178M.

-h jest rozszerzeniem coreutils GNU, a nie bazowym POSIX.

Pamiętaj, że to nie odpowiada dokładnie na pytanie. Jeśli chcesz mieć rozmiary ściśle w MiB, nawet dla małych lub gigantycznych plików, odpowiedź Michaela Kjörlinga robi to dla rdzeni GNUls .

Sirex
źródło
4
To wydrukuje rozmiary plików w GB dla czegoś większego niż nieco poniżej 1,0 GiB (wierzę).
CVn
5
@ MichaelKjörling Nie uważam tego za złą odpowiedź (choć nie głosowałem za tym). Czasami OP nie wypowiada pytania dokładnie tak, jak powinno, więc możliwe, że po prostu chcieli uzyskać wyniki czytelne dla człowieka i zamiast tego sformułowali je jako „w MB”.
Dason
5
Pozytywne. „To nie odpowiada na pytanie (MB)” jest całkowicie poprawnym stwierdzeniem, ale ta odpowiedź tylko zwiększyła użyteczność tej strony SO, ponieważ ta odpowiedź jest w tym samym kontekście. Przyszedłem tylko na tę stronę, szukając rozwiązania ogólnego wymogu „pokaż daty w formie czytelnej dla człowieka” i hjest o wiele łatwiejsze do napisania niż--block-size=M
Ejaz
6
„czytelny dla człowieka” jest trochę ironiczny. Kto ls -lw ogóle używa, jeśli nie ludzie? : p
Blauhirn
2
@chengyang: parsowanie ls -ldanych wyjściowych jest złym sposobem na robienie rzeczy, w 99% przypadków. unix.stackexchange.com/questions/128985/why-not-parse-ls . Ten 1% jest hojny i jest w zasadzie ograniczony do jednowierszowych, które piszesz interaktywnie do jednorazowego użytku, a nie skryptu, którego będziesz używać wielokrotnie w nieznanych nazwach plików.
Peter Cordes
45

ls -lhS sortuj według rozmiaru, w formacie czytelnym dla człowieka

jaciefan
źródło
2
ls -lhPrzeczytaj komentarze do odpowiedzi, aby dowiedzieć się, dlaczego tak naprawdę nie odpowiada na pytanie.
Alexander Batischev
2
To nie tylko nie odpowiada na pytanie (jak omówiono w komentarzach do odpowiedzi Sirex), ale także nie dodaje nic istotnego w stosunku do żadnej z istniejących odpowiedzi: OP nie pyta o porządek sortowania.
CVn
6
właśnie pomyślałem, że sortowanie według rozmiaru jest potencjalnym następstwem, jakie ludzie mogą mieć, przynajmniej tak miałem
jaciefan
1
W takim przypadku ludzie powinni zastanowić się, jak wyświetlić listę wszystkich plików uporządkowanych według rozmiaru, co dotyczy dokładnie tego scenariusza.
CVn
Uważam, że jest to godny dodatek do odpowiedzi, zwłaszcza, że ​​omawia odpowiedź
Sirex
9

Jest to opcja wyszczególnienia rosnąco wszystkiego w kolejności katalogowej według rozmiaru pliku (wciąż czytelnego dla człowieka).

ls -lSrh
Marcos Placona
źródło
Czy uważasz, że komentarze z drugiej odpowiedzi, która nie odpowiada na pytanie , dotyczą również tego?
Dan Dascalescu
@DanDascalescu Nie. Te komentarze nie są pomocne, są 2 odpowiedzi, o których mowa. Tylko moje 2 centy jako hack próbujący wymyślić, jak wyświetlić listę rozmiarów plików w systemie Linux, o którym nic nie wie.
Dowlers