Polecenie ls: jak wyświetlić rozmiar pliku w megabajtach?

161

W Unixie (Tru64), jak sprawić, by lspolecenie wyświetlało rozmiar pliku w megabajtach? Obecnie jestem w stanie wyświetlić go w bajtach, używając:

ls -la
phuclv
źródło

Odpowiedzi:

247

Może ci -hwystarczy:

-h
W przypadku użycia z opcją -l użyj sufiksów jednostek: Bajt, Kilobajt, Megabajt, Gigabajt, Terabajt i Petabajt, aby zmniejszyć liczbę cyfr do trzech lub mniej, używając podstawy 2 dla rozmiarów.

ls -lah

Porada ogólna: man commandnamesłuży do czytania instrukcji / pomocy dla określonego polecenia, np man ls. Tutaj .

Felix
źródło
1
Dzięki, ale opcja -h nie istnieje na Tru64 Unix.
8
Porady ogólne: zainstaluj narzędzia GNU ...
reinierpost
22
Podoba mi się twoja wskazówka na temat korzystania z człowieka, ale tak naprawdę wyszukiwanie w Google jest o wiele szybsze niż używanie człowieka przez większość czasu (jak teraz, gdy znalazłem ten wynik w Google).
trusktr
4
Google w porządku i wszystko za ogólne wskazówki, ale ostatecznie strony podręcznika są systemowe / OS, nawet specyficzne dla hosta, zwykle tworzone podczas kompilacji lub instalacji oprogramowania, a zatem autorytatywne dla oprogramowania w danym systemie.
Nevin Williams
1
Po prostu zataczam
MariusMatutiae
32

ls --block-size=Mdrukuje rozmiary w megabajtach, ale pokazuje 1 MB również dla wszystkiego poniżej 1 MB. Nie jestem jednak pewien, czy ta opcja jest dopuszczalna w twojej wersji ls dla UNIX-a.

Właściwie ls -lhdrukuje również rozmiary w gigabajtach, jeśli plik jest wystarczająco duży (Cóż w każdym razie: w systemie Linux 64bit to działa:>)

W węźle bocznym: du -sh *drukuje również rozmiary katalogów w bieżącym katalogu.

Stycznia
źródło
Dzięki! Musiałem monitorować zmiany plików na żywo w folderze, a używanie ls -hnie ma znaczenia, gdy plik wzrośnie powyżej 1 GB, więc używam tego polecenia w pętli 1-sekundowej:while true ; do ls -al --block-size=M ; sleep 1 ; done
ccpizza
15

Będziesz musiał użyć awkmatematyki:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

Nie wpłynie to na dane wyjściowe dla plików mniejszych niż mega.

Konieczne może być dostosowanie numeru pola w celu dopasowania do układu ls. Możesz zmienić megana „1000000”, jeśli takie są twoje preferencje.

Spowoduje to wydrukowanie większej liczby miejsc po przecinku, niż prawdopodobnie chcesz. Możesz zaimplementować funkcję zaokrąglania.

Dennis Williamson
źródło
3
O wiele mniej elegancki niż ls -lhlub ls --block-size=M, ale AWK jest bardzo przydatny!
Statwonk
Dokładnie to, czego potrzebowałem. Wszystkie pozostałe rozwiązania zaokrąglają do najbliższego MB, ale pokazuje kilka miejsc po przecinku i można go łatwo dostosować.
zeroimpl
3
To dobre rozwiązanie dla tych systemów (AIX - patrzę na ciebie), które nie mają opcji -h.
Buggabill,
14

wypróbuj ls -shRrekurencyjny format czytelny dla człowieka.

Sorter
źródło
4
OP stwierdził, że nie ma -hTru64 , i zrobił to przez dwa lata przed opublikowaniem tej odpowiedzi.
CVn
3
Myśl To moja odpowiedzialność, aby pomóc tym, którzy docierają tutaj za pomocą tej samej wyszukiwarki Google.
Sorter
8

spróbuj ls -lash, drukuje rozmiary w formacie czytelnym dla człowieka

n0pe
źródło
5

du -sm filename.txt

Eter
źródło
1
zawsze zaokrągla rozmiar ... jeśli rozmiar jest mniejszy niż 1 MB, powiedzmy 500K, to również wydrukuje 1M
AnonGeek
5

Możesz także wpisać

du -sh ./*

Spowoduje to wyświetlenie wszystkich folderów w bieżącym katalogu, w formacie czytelnym dla człowieka, w tym bardziej znane rozmiary plików w Kb, Mb, Gb.

Keng
źródło
2

Jeśli chcesz tylko rozmiar określonego pliku, to polecenie, trywialna ekstrapolacja poprzednich odpowiedzi, to:

ls -sh nazwa_pliku

-sjest dla wielkości i hjest czytelny dla człowieka (jak wspomniano powyżej kilka razy).

Dane wyjściowe będą wyglądać następująco:

753M myfilename

Jeśli pominiesz nazwę pliku (ów), wyświetli on katalog, umieszczając rozmiar każdego pliku obok jego nazwy - podobnie jak ls -laprzy wywołaniu bez argumentów nazwy pliku.

Mam nadzieję że to pomoże.

Rob Jones
źródło
2
To pytanie dotyczy Tru64 Unix, a OP stwierdził prawie pięć lat temu, że -hopcja nie istnieje w lstym systemie.
G-Man
2
ls -l --block-size=MB 

Dla --block-sizeparametru:

  • użyj MBza 10 ^ 6
  • użyj tylko Mdla 2 ^ 20
Evan
źródło
Pamiętaj, że nie wyświetli to miejsc po przecinku . Ponadto wszystko powyżej 0 kB, ale nie więcej niż 1 MB, będzie oznaczone jako1MB . Z tego powodu okazałem ls -l --block-size=kBsię bardziej przydatny.
DaAwesomeP
0

Jeśli interesuje Cię tylko rozmiar pliku i nie musisz używać lspolecenia, spróbuj wykonać następujące czynności:

# echo "Hello World" > file.txt
# ls -l file.txt 
-rw-r--r-- 1 user user 12 Mar 10 11:32 file.txt
# stat --printf='%s\n' file.txt
12

Spowoduje to wydrukowanie rozmiaru pliku bez potrzeby parsowania czegokolwiek.

SKN
źródło
OP chce rozmiar w MB, może opcja statyczna da rozmiar w postaci czytelnej dla człowieka?
Archemar,
Ach, to było ze mnie głupie. Dzięki za złapanie tego. stat nie ma możliwości manipulowania rozmiarem za pomocą --printf ani żadnej innej opcji, o ile wiem. Prawdopodobnie wymagałoby to użycia kombinacji narzędzi wiersza polecenia printf i bc. W takim razie po co zawracać sobie głowę. ls i cut / awk byłyby szybsze.
SKN