Function: eshell/du
eshell/du is a byte-compiled function defined in em-unix.el.gz.
Signature
(eshell/du &rest ARGS)
Documentation
Implementation of "du" in Lisp, passing ARGS.
Source Code
;; Defined in /usr/src/emacs/lisp/eshell/em-unix.el.gz
(defun eshell/du (&rest args)
"Implementation of \"du\" in Lisp, passing ARGS."
(setq args (if args
(eshell-stringify-list (flatten-tree args))
'(".")))
(let ((ext-du (eshell-search-path "du")))
(if (and ext-du
(not (catch 'have-ange-path
(dolist (arg args)
(if (string-equal
(file-remote-p (expand-file-name arg) 'method) "ftp")
(throw 'have-ange-path t))))))
(throw 'eshell-replace-command
(eshell-parse-command (eshell-quote-argument ext-du) args))
(eshell-eval-using-options
"du" args
'((?a "all" nil show-all
"write counts for all files, not just directories")
(nil "block-size" t block-size
"use SIZE-byte blocks (i.e., --block-size SIZE)")
(?b "bytes" nil by-bytes
"print size in bytes")
(?c "total" nil grand-total
"produce a grand total")
(?d "max-depth" t max-depth
"display data only this many levels of data")
(?h "human-readable" 1024 human-readable
"print sizes in human readable format")
(?H "is" 1000 human-readable
"likewise, but use powers of 1000 not 1024")
(?k "kilobytes" 1024 block-size
"like --block-size 1024")
(?L "dereference" nil dereference-links
"dereference all symbolic links")
(?m "megabytes" 1048576 block-size
"like --block-size 1048576")
(?s "summarize" 0 max-depth
"display only a total for each argument")
(?x "one-file-system" nil only-one-filesystem
"skip directories on different filesystems")
(nil "help" nil nil
"show this usage screen")
:external "du"
:usage "[OPTION]... FILE...
Summarize disk usage of each FILE, recursively for directories.")
(unless by-bytes
(setq block-size (or block-size 1024)))
(if (and max-depth (stringp max-depth))
(setq max-depth (string-to-number max-depth)))
;; filesystem support means nothing under Windows
(if (eshell-under-windows-p)
(setq only-one-filesystem nil))
(let ((size 0.0))
(while args
(if only-one-filesystem
(setq only-one-filesystem
(file-attribute-device-number (eshell-file-attributes
(file-name-as-directory (car args))))))
(setq size (+ size (eshell-du-sum-directory
(directory-file-name (car args)) 0)))
(setq args (cdr args)))
(if grand-total
(eshell-print (concat (eshell-du-size-string size)
"total\n"))))))))