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*_*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)
这是一种方法,避免不良做法:
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)
苹果系统
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)
这将做到这一点:
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)