是否有可能在Unix中使用ls列出子目录的总大小及其所有内容,而不是通常的4K(我假设)只是目录文件本身?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

在翻遍了手册之后,我一无所获。


当前回答

Du -sch *在同一目录下。

其他回答

以人类可读的格式列出当前目录中最大的目录:

Du -sh * | sort -hr

一个更好的限制行数的方法是

Du -sh * | sort -hr | head -n10

在哪里可以增加-n标志的后缀来限制列出的行数

示例:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

这样读起来更方便:)

有一段时间,我使用Nautilus(在RHEL 6.0的Gnome桌面上)来删除我的主文件夹上的文件,而不是使用bash中的rm命令。因此,总大小显示为

du -sh

每个子目录的磁盘使用量之和不匹配,当我使用

du -sh *

我花了一段时间才意识到Nautilus将删除的文件发送到它的垃圾文件夹,而这个文件夹并没有在du -sh *命令中列出。所以,我只是想分享这个,以防有人面临同样的问题。

您需要的命令是'du -sk' du = "磁盘使用率"

-k标志提供以千字节为单位的输出,而不是磁盘扇区的du默认值(512字节块)。

-s标志将只列出顶级目录(即默认情况下的当前目录或命令行上指定的目录)中的内容。奇怪的是,在这方面du和ls表现相反。默认情况下,du将递归地提供每个子目录的磁盘使用情况。相反,ls只会给出指定目录下的列表文件。(ls -R提供递归行为。)

在初始化脚本中放置。bashrc…根据需要调整def。

duh() {
  # shows disk utilization for a path and depth level
  path="${1:-$PWD}"
  level="${2:-0}"
  du "$path" -h --max-depth="$level"
}

只是一个警告,如果你想比较文件的大小。Du根据文件系统、块大小、... .产生不同的结果

可能会发生文件大小不同的情况,例如比较您的本地硬盘和USB大容量存储设备上的相同目录。我使用以下脚本,包括ls来计算目录大小。结果以字节为单位,将所有子目录都考虑在内。

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"