ls-command: how to display the file size in megabytes?

163

45

In Unix (Tru64), how do I make the ls command show the file size in megabytes? Currently I am able to show it in bytes using the following:

ls -la

atricapilla

Posted 2010-09-20T11:20:48.627

Reputation:

Answers

250

Maybe -h is sufficient for you:

-h
When used with the -l option, use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to three or less using base 2 for sizes.

ls -lah

General advice: Use man commandname to read the manual/help of a certain command, e.g. here man ls.

Felix

Posted 2010-09-20T11:20:48.627

Reputation: 4 095

Can we set MBs as default? – Omer – 2017-07-13T06:43:37.867

ls --help usually has enough information vs man ls – icc97 – 2017-12-27T23:11:09.163

1Thanks, but -h option does not seem to exist on Tru64 Unix. – None – 2010-09-20T11:26:04.947

8General advice: install GNU utilities ... – reinierpost – 2010-09-20T12:35:46.057

+1 for the man pages(+5 if I could!). They are a priceless resource when you don't know how to do something with a particular command. – Kevin M – 2010-09-20T13:54:26.550

Mnemonic: h stands for human-readable – Miscreant – 2018-05-01T03:53:38.423

22I like your tip about using man, but really, searching on Google is so much faster than using man a lot of the time (as now, when I found this result on Google). – trusktr – 2013-03-20T05:00:24.307

4Google's fine and all for general hints, but ultimately man pages are system/OS, even host specific, usually created when the software is compiled or installed, and thus, authoritative for the software on your particular system. – Nevin Williams – 2013-05-05T04:33:11.753

1

Just to come full circle, there's man online for gnu/linux: http://linux.die.net/man/

– MariusMatutiae – 2013-10-11T08:20:11.567

32

ls --block-size=M prints the sizes in Megabytes but shows 1MB also for anything below 1 MB. I'm unsure if this option is acceptable in your UNIX version of ls, though.

Actually ls -lh also prints sizes in Gigabytes if the file is big enough (Well anyways: on Linux 64bit this does work :>)

On a side node: du -sh * prints also directory sizes in current directory.

Jan.

Posted 2010-09-20T11:20:48.627

Reputation: 431

Thanks! I needed to monitor live file changes in a folder and using ls -h is meaningless after a file grows over 1GB, so I use this command in a 1 second loop: while true ; do ls -al --block-size=M ; sleep 1 ; done – ccpizza – 2016-03-19T13:13:39.660

15

You will have to use awk to do the math for you:

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

This won't affect the output for files that are smaller than mega.

You may need to adjust the field number to match the way your ls is laid out. You can change mega to "1000000" if that is your preference.

This will print more decimal places than you probably want. You could implement a rounding function.

Paused until further notice.

Posted 2010-09-20T11:20:48.627

Reputation: 86 075

3Much less elegant than ls -lh or ls --block-size=M, but AWK is very useful! – Statwonk – 2014-09-28T14:50:00.913

Just what I needed. All the other solutions round to the nearest MB but this shows a few decimal places and is easily customizable. – zeroimpl – 2014-10-17T00:02:20.617

3This is a nice solution for those systems (AIX - I am looking at you) that do not have the -h option. – Buggabill – 2015-11-18T13:22:44.643

13

try ls -shR for recursive human readable format.

Sorter

Posted 2010-09-20T11:20:48.627

Reputation: 391

3Thought It's my responsibility to help those who reach here with the same google search. – Sorter – 2017-02-22T17:52:56.903

4OP has stated that there is no -h on Tru64, and did so over two years before this answer was posted. – a CVn – 2013-10-11T09:02:00.177

8

try ls -lash, it prints sizes in human readable format

iddqd

Posted 2010-09-20T11:20:48.627

Reputation:

5

du -sm filename.txt

Ether

Posted 2010-09-20T11:20:48.627

Reputation: 1 007

1it always round up the size...if size is less than 1 MB say 500K, then also it will print 1M – AnonGeek – 2012-06-29T13:08:18.917

5

You can also type

du -sh ./*

This will list all the folders under current directory, with human-readable format, including the more familiar file sizes in Kb, Mb, Gb.

Keng

Posted 2010-09-20T11:20:48.627

Reputation: 151

2

If you just want the size of only a specific file, then the command, a trivial extrapolation of the previous answers, is:

ls -sh filename(s)

-s is for size and the h is for Human Readable (as mentioned above a few times).

The output will look like this:

753M myfilename

If you leave out the filename(s), it'll list the directory, placing the size of each file next to its name — not unlike what ls -la does when invoked with no filename arguments.

Hope this helps.

Rob Jones

Posted 2010-09-20T11:20:48.627

Reputation: 29

2This question is about Tru64 Unix, and the OP stated almost five years ago that the -h option does not exist in ls on that system. – G-Man Says 'Reinstate Monica' – 2015-06-13T08:14:01.933

2

ls -l --block-size=MB 

For the --block-size parameter:

  • use MB for 10^6
  • use just M for 2^20

Evan

Posted 2010-09-20T11:20:48.627

Reputation: 121

Note that this won't show any decimal places. Also, anything above 0 kB but nor greater than 1 MB will be shown as 1MB. For this reason I found ls -l --block-size=kB to be more useful. – DaAwesomeP – 2015-10-26T02:31:21.390

0

If you're just interested in the file size, and you don't have to use the ls command, try the following:

# 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

This will print the file size without the need to parse anything.

SKN

Posted 2010-09-20T11:20:48.627

Reputation: 1

OP want size in MB, maybe a stat option will produce size in human readable form ? – Archemar – 2016-03-12T10:47:29.050

Ah, that was dumb of me. Thanks for catching that. stat does not have an option to manipulate the size using --printf or any other option as far as I know.

It would likely require using a combination of printf and bc command-line utilities. In which case, why bother. ls and cut/awk would be quicker. – SKN – 2016-04-23T21:42:14.227