Getting directory size linux

How do I get the size of a directory on the command line?

I tried to obtain the size of a directory (containing directories and sub directories) by using the ls command with option l . It seems to work for files ( ls -l file name ), but if I try to get the size of a directory (for instance, ls -l /home ), I get only 4096 bytes, although altogether it is much bigger.

1) Strictly speaking, you can’t. Linux has directories, not folders. 2) There’s a difference between the size of a directory (which is a special file holding inodes that point to other files), and the size of the contents of that directory. As others have pointed out, the du command provides the latter, which is what it appears you want.

as you seem to be new, I’ll just point out the helpful -h option you can add to the -l option (i.e. ls -lh ) to get the sizes of files to be printed out in human-friendly notation like 1.1M instead of 1130301. The «h» in the du -hs command that @sam gave as the answer for your question about directories also means «human-readable», and it also appears in df -h which shows the human readable amounts of used and free space on disk.

16 Answers 16

Explanation

  • du (disc usage) command estimates file_path space usage
  • The options -sh are (from man du ):
 -s, --summarize display only a total for each argument -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) 
 -c, --total produce a grand total 

It works very nice with find e.g. to count the amount of space in specific subdirectories in current path: $ find . -type d -name «node_modules» -prune -exec du -sh <> \;

I’m looking right now at a folder I just copied from an external drive. It contains four files (no hardlinks). du -ba $folder reports that each of these files is identical in size across the copied folders, but the total at the folder level does not match. du -bs , du -h , etc., same answer. (One folder size is six bytes more than the sum of the files; the other is ~10% larger.) I’ve seen this issue before comparing a folder on an external drive. Is there any unix command that will reliably report two folders containing identical files as being the same «size»?

will give you the cumulative disk usage of all non-hidden directories, files etc in the current directory in human-readable format.

You can use the df command to know the free space in the filesystem containing the directory:

du -sh * starts throwing «unknown option» errors if any of the files in that dir begin with a dash. Safer to do du -sh — *

du -sh — * .* to include dotfiles. This is useful to include a possibly large .git directory, for example. Alternatively in zsh you can setopt globdots to glob dotfiles by default.

What does the — do? I know it applies to shell built-ins to end option arguments, but du is not a built-in, and I don’t see this usage documented for du : linux.die.net/man/1/du

(—) is used in most bash built-in commands and many other commands to signify the end of command options, after which only positional parameters are accepted. source

du is your friend. If you just want to know the total size of a directory then jump into it and run:

If you also would like to know which sub-folders take up how much disk space?! You could extend this command to:

which will give you the size of all sub-folders (level 1). The output will be sorted (largest folder on top).

It seems on some (perhaps older?) versions of linux, sort does not have an h switch, and therefore the next best command I could find is: du -c —max-depth=1 | sort -rn

to avoid the line for current directory in the result, just add star (idea from Pacifist, above): du -h —max-depth=1 * | sort -h

du can be complicated to use since you have to seemingly pass 100 arguments to get decent output. And figuring out the size of hidden folders is even tougher.

Make your life easy and use ncdu .

ncdu

You get per folder summaries that are easily browsable.

checked out ncdu and would like to point out to others: when you’re hunting for those files that are bloating some directory this utility is extremely useful as it displays size tapes/indicators which make the culprit(s) stand out. Overall this offers the right amount of interactivity which may be particularly useful in command-line only environments.

Others have mentioned du , but I would also like to mention Ncdu — which is an ncurses version of du and provides interactivity: You can explore the directory hierarchy directly and see the sizes of subdirectories.

The du command shows the disk usage of the file.

The -h option shows results in human-readable form (e.g., 4k, 5M, 3G).

All of the above examples will tell you the size of the data on disk (i.e. the amount of disk space a particular file is using, which is usually larger than the actual file size). There are some situations where these will not give you an accurate report, if the data is not actually stored on this particular disk and only inode references exist.

In your example, you have used ls -l on a single file, which will have returned the file’s actual size, NOT its size on disk.

If you want to know the actual file sizes, add the -b option to du.

Yes. I’m using sdfs which compresses & dedups the files, so I couldn’t figure out why it was reporting such low numbers. The actual size of the files with ls can be found by using: du -b

This shows how much disk space you have left on the current drive and then tells you how much every file/directory takes up. e.g.,

Filesystem Size Used Avail Use% Mounted on /dev/sdb2 206G 167G 29G 86% / 115M node_modules 2.1M examples 68K src 4.0K webpack.config.js 4.0K README.md 4.0K package.json 

personally I think this is best, if you don’t want to use ncdu

Thank you! A command to see the size of just the direct children — avoiding the huge wall of text that displays when you use the regular «recursive» version.

In order to get the total size of files under a directory, you can select the type by find

find -type f -print0 | xargs -0 stat -c %s | awk ' END ' 
find -not -type d -print0 | xargs -0 stat -c %s | awk ' END ' 

Why not use du ?

The du command is easier but it will count all types of files, and you don’t have an option to change it. For example, assuming the current directory has a file, an empty dir and a symlink:

$ ls -AlF total 8,192 -rw-r--r-- 1 nordic nordic 29 Mar 28 19:05 abc drwxr-xr-x 2 nordic nordic 4,096 Mar 28 19:06 gogo/ lrwxrwxrwx 1 nordic nordic 3 Mar 28 19:06 s_gogo -> abc $ find -type f -print0 | xargs -0 stat -c %s | awk ' END ' 29 $ du -sb 8224 . 

I would use -not -type d to sum not only sizes of ordinary files ( -type f ) but also sizes of symbolic links and so on.

This is great, because you don’t get the overhead required to store the files, but only the size of the files themselves.

Here is a function for your .bash_aliases

# du with mount exclude and sort function dusort () < DIR=$(echo $1 | sed 's#\/$##') du -scxh $(mount | awk '' | sort | uniq \ | sed 's#/# -- exclude=/#') $DIR/* | sort -h > 
$ dusort / . 0 /mnt 0 /sbin 0 /srv 4,0K /tmp 728K /home 23M /etc 169M /boot 528M /root 1,4G /usr 3,3G /var 4,3G /opt 9,6G total 
sudo ls -1d */ | sudo xargs -I<> du <> -sh && sudo du -sh 

Note that du prints the space that a directory occupy on the media which is usually bigger than just the total size of all files in the directory, because du takes into account the size of all auxiliary information that is stored on the media to organize the directory in compliance with file system format.

If the file system is compressible, then du may output even smaller number than the total size of all files, because files may be internally compressed by the file system and so they take less space on the media than just uncompressed information they contain. Same if there are sparse files.

if there are hard links in the directory, then du may print smaller value as well because several different files in the directory refer the same data on the media.

To get the straightforward total size of all files in the directory, the following one-line shell expression can be used (assuming a GNU system):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc 
find . ! -type d -printf '%s\n' | paste -sd+ - | bc 

It just sums sizes of all non-directory files in the directory (and its subdirectories recursively) one by one. Note that for symlinks, it reports the size of the symlink (not of the file the symlink points to).

Источник

How to Get the Size of a Directory in Linux

Many users run Linux from the command line. However, the command line — sometimes known as the terminal — doesn’t have an intuitive interface for checking disk space in Linux.

This guide shows you how to find the size of a specific directory in Linux from the command line.

Tutorial on how to find directory size linux

  • A system running Linux
  • A command line / terminal window (available by clicking Search, then typing terminal)
  • A user account with sudo or root privileges

Note: In Linux, a directory is the equivalent of a folder in Windows. A directory may have directories inside (called subdirectories), or it may only contain files.

Option 1: Display the Size of a Directory Using the du Command

The du command stands for disk usage. This command is included by default in most Linux distributions.

You can display the size of your current directory by typing du in the command line:

The system should display a list of the contents of your home directory, with a number to the left. That number is the size of the object in kilobytes.

An example of the du command output.

You can add the -h option to make the output more readable:

Readable list of contents of your home directory.

Each entry will start with a number and a letter. The number is the amount of space used, and the letter (usually K, M, or G) indicates Kilobytes, Megabytes, or Gigabytes. For example:

400K – 400 kilobytes 7.3M – 7.3 megabytes 2.2G – 2.2 gigabytes

To find the size of a specific directory different from your current working directory. The du command allows you to specify a directory to examine:

This displays the size of the contents of the /var directory. You may see some entries with an error, as in the image below.

Display the size of a specific directory.

This happens when your user account does not have permission to access a particular directory. Use the sudo or su command to get access privileges:

Note: Some versions of Linux don’t enable sudo by default. You can use the su command to switch to the root user account instead.

To display total disk usage of a particular directory, use the -c command:

Options can be combined. If you wanted to repeat the previous command in human-readable format, enter the following:

You can limit the scan to a certain level of subdirectory by using the max-depth option. For example, to scan only the size of the top directory, use —max-depth=0 :

If you wanted to list only the top directory and the first layer of subdirectories, change —max-depth=1 :

Find the size of the top directory

If you run into trouble or want to explore more options for the du command, enter the following command to display the help file:

Option 2: Get Size of Directory in Linux Using tree Command

By default, the tree command is not included in some versions of Linux. To install it, enter the following:

The tree command displays a visual representation of your directories. It uses lines to indicate which subdirectories belong where, and it uses colors to indicate directories and files.

tree can also be used with options. To display a human-readable size of the current directory’s subdirectories, enter the following:

Display disk usage using the tree command.

Like the du command, tree can target a specific directory:

This command takes a few moments since the /var directory has many entries.

The tree command also has a help file, which you can access by entering:

Option 3: Find the Size of a Linux Directory Using ncdu Command

The ncdu tool stands for NCurses Disk Usage. Like the tree command, it is not installed by default on some versions of Linux. To install it, enter the following:

The ncdu utility is an interactive display of your disk usage. For example, enter the following:

Display Disk Usage Using the ncdu command.

In the upper left corner, it displays the current directory being scanned. A column on the left displays the numerical size, a graph of #- signs to indicate the relative size, and the file or directory.

Use the up and down arrows to select different lines. The right arrow will browse into a directory, and the left arrow will take you back.

ncdu can be used to target a specific directory, for example:

For help, press the ? key inside the ncdu interface. To quit, press the letter q .

Note: Learn how to move directories in Linux using the GUI or system commands.

You now have three different options to find the size of a directory in Linux operating systems.

If you want to learn more about directories in Linux, read our article how to rename directories in Linux.

Источник

Читайте также:  Clock gettime linux example
Оцените статью
Adblock
detector