统计测量某些文件类型的磁盘空间

Dan*_*Dan 21 unix linux bash diskspace

我有几个文件夹中的一些文件:

/home/d/folder1/a.txt
/home/d/folder1/b.txt
/home/d/folder1/c.mov
/home/d/folder2/a.txt
/home/d/folder2/d.mov
/home/d/folder2/folder3/f.txt
Run Code Online (Sandbox Code Playgroud)

如何测量/ home/d /中所有.txt文件占用的磁盘空间总量?

我知道du会给我一个给定文件夹的总空间,ls -l会给我单个文件的总空间,但是如果我想要添加所有txt文件并查看所有人占用的空间该怎么办.对于/ home/d /中的所有.txt,包括folder1和folder2以及像folder3这样的子文件夹,一个巨大的总txt文件

Bar*_*lly 40

find folder1 folder2 -iname '*.txt' -print0 | du --files0-from - -c -s | tail -1


Bar*_*arn 20

这将按扩展名报告磁盘空间使用情况:

find . -type f -printf "%f %s\n" |
  awk '{
      PARTSCOUNT=split( $1, FILEPARTS, "." );
      EXTENSION=PARTSCOUNT == 1 ? "NULL" : FILEPARTS[PARTSCOUNT];
      FILETYPE_MAP[EXTENSION]+=$2
    }
   END {
     for( FILETYPE in FILETYPE_MAP ) {
       print FILETYPE_MAP[FILETYPE], FILETYPE;
      }
   }' | sort -n
Run Code Online (Sandbox Code Playgroud)

输出:

3250 png
30334451 mov
57725092729 m4a
69460813270 3gp
79456825676 mp3
131208301755 mp4
Run Code Online (Sandbox Code Playgroud)

  • 这非常有效.为了获得人类可读的输出,比如`123GiB mp4`,将输出传递给`numfmt --field = 1 --to = iec-i --format"%8f"--suffix B`. (3认同)

小智 11

简单:

$ du -ch*.txt.

如果您只想显示总空间,那么:

$ du -ch*.txt | 尾巴-1

  • 很好的答案,但这不会搜索子目录 (2认同)

Pau*_*ce. 6

这是一种方法,避免不良做法:

total=0
while read -r line
do
    size=($line)
    (( total+=size ))
done < <( find . -iname "*.txt" -exec du -b {} + )
echo "$total"
Run Code Online (Sandbox Code Playgroud)

如果要排除当前目录下,使用du-mindepth 2.

另一个版本可能更符合POSIX:

find . -iname "*.txt" -exec du -b {} + | awk '{total += $1} END {print total}'
Run Code Online (Sandbox Code Playgroud)


ppu*_*ann 5

苹果系统

  • 使用该工具du和参数-I排除所有其他文件

Linux

-X, --exclude-from=FILE
              exclude files that match any pattern in FILE

--exclude=PATTERN
              exclude files that match PATTERN
Run Code Online (Sandbox Code Playgroud)


enn*_*ler 4

这将做到这一点:

total=0
for file in *.txt
do
    space=$(ls -l "$file" | awk '{print $5}')
    let total+=space
done
echo $total
Run Code Online (Sandbox Code Playgroud)