[英]Bash - Filter out directories from ls -la output, but leave directory "."
我正在尝试使用 oneliner 计算从./
开始的所有文件和子目录的大小:
ls -laR | grep -v "\.\." | awk '{total += $5} END {print total}'
但这会将子目录的大小计算两次,因为ls -laR | grep -v "\\.\\."
输出ls -laR | grep -v "\\.\\."
是:
.:
total 32
drwxr-xr-x 3 root root 4096 Nov 29 22:59 .
-rw-r--r-- 1 root root 55 Nov 29 02:19 131
-rw-r--r-- 1 root root 50 Nov 29 01:28 abc
-rw-r--r-- 1 root root 1000 Nov 29 01:27 access.log
drwxr-xr-x 2 root root 4096 Nov 29 22:24 asd
-rwx------ 1 root root 458 Nov 29 02:54 oneliners.sh
-rwx------ 1 root root 2136 Nov 29 17:56 regexp.sh.skript
./asd:
total 32
drwxr-xr-x 2 root root 4096 Nov 29 22:24 .
-rw-r--r-- 1 root root 21298 Nov 29 22:26 asd
所以它计算目录 asd 两次。 一次在目录列表.:
中:
drwxr-xr-x 2 root root 4096 Nov 29 22:24 asd
和第二次列出目录./asd:
as:
drwxr-xr-x 2 root root 4096 Nov 29 22:24 .
我希望,这将发生在每个子目录中。 有没有办法将它们从ls
输出中删除一次? Usint grep -v '^d'
删除所有目录,因此它们根本不会被计算在内。 我知道我可以简单地使用du -sb
来完成它,但我需要用花哨的 oneliner 来完成它。
ls -FlaR |grep -v '\s\.\{1,\}/$' |awk '{total += $5} END {print total}'
包括“.”中文件夹的大小,但不包括“.”的大小本身。 与 du 相比,答案完全不同——因为 du 是关于磁盘上的空间(与块有关)。 我使用你的 awk 脚本得到的答案更接近于操作系统报告的 - 如果你减去你得到匹配的目录大小,这表明 MacOS X 使用类似于
ls -FlaR |grep -v '^d.*/$' |awk '{total += $5} END {print total}'
用于计算文件夹内容的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.