【问题标题】:Bash code to count size of files without folders用于计算没有文件夹的文件大小的 Bash 代码
【发布时间】:2017-11-10 14:04:35
【问题描述】:

计算特定目录中文件的大小,但没有其中的文件夹

所以如果我有文件夹

xxxxx.txt = 8kb
yyyy.exe = 29kb
game folder = 450kb
the answer will be 
37 kb 

当我尝试执行 du -sh 时,它给了我文件的总大小,所以这不好

我也可以控制输出是否为 'byte/mb' 等?

另一个简单的问题: 我想计算文件夹的数量并将其保存到文件中,然后一旦我运行脚本,它将显示上次添加或删除了多少文件夹

现在我的想法是使用 ls 和 'wc' 来计算文件夹的数量 并使用 tee 命令将其输出到文件中。 但我在将所有内容连接在一起时遇到问题..

谢谢!

【问题讨论】:

    标签: bash count


    【解决方案1】:

    试试这个:

    ls -l        |  # list file 
    grep -v '^d' |  # skip directory
    awk '{size+=$5} END {print size size/1024 size/(1024*1024)}' # sum size in byte and kByte, etc..
    

    ls -l     |  # list file 
    grep '^d' |  # select directory
    wc -l        # count
    

    两者:

    ls -l        |  # list file 
    awk 'BEGIN{nbdir=0} /-/{sizefile+=$5} /^d/{nbdir+=1}END {print sizefile" bytes "nbdir" folders"}' 
    

    awk : /pattern/{bloc}

    【讨论】:

      【解决方案2】:

      一个相当简单的方法:

      • 仅查找文件,仅在当前目录中,使用find
      • 将文件列表传递给du -kxargs
      • du-k 标志生成以千字节为单位的结果
      • 使用awk 计算和打印总和

      像这样:

      find . -type f -maxdepth 1 -print0 | xargs -0 du -k | awk '{ sum += $1 } END { print sum }'
      

      【讨论】:

        【解决方案3】:

        1.使用ls

        这是ls的解决方案

        ls -l | awk '!/^d/ {sum+=$5} END {print sum}'
        

        结果以字节为单位。模式匹配除目录之外的所有类型的行。例如只包含常规文件,我们可以使用/^-/

        来自man ls (1p)

           d       Directory.
           b       Block special file.
           c       Character special file.
           l (ell) Symbolic link.
           p       FIFO.
           −       Regular file.
        


        2。使用du

        您可以通过du -Ssh获得不包括目录的文件的总估计磁盘使用量(并不总是“大小”)

        -S, --separate-dirs
        对于目录不包括子目录的大小

        使用-h,这将为每个文件计算最小一个块 (4K),因为这通常是文件系统的最小磁盘使用量。 --apparent-size 可用于打印估计实际尺寸。

        --apparent-size
        打印外观尺寸,而不是磁盘使用情况;尽管表观大小通常较小,但由于(“稀疏”)文件中的孔、内部碎片、间接块等原因,它可能会更大

        所以du -Ssh --apparent-size(以人类可读的格式)或du -Ssb(以字节为单位)预计会给出相同的结果。


        在这两种情况下,我注意到在使用-S 时,会为. 当前目录计算额外的+4K (+4096)。 -b 将计数块大小设置为 1 字节,所以我猜文件大小估计变得准确。所以这是一种提取目录中文件大小(以字节为单位)的方法,不包括子目录
        du -Ssb | awk '{print $1-4096}'
        

        请注意,仅排除目录,因此将包括任何其他类型,例如符号链接。

        【讨论】:

          猜你喜欢
          • 2011-08-17
          • 2019-01-06
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          相关资源
          最近更新 更多