微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以ls格式显示文件和文件夹大小

ls -l将显示所有文件文件夹的详细信息。 但文件夹大小不正确(alwasy show 4.0k)。

那么如何显示文件/文件夹为ls -l格式,而且文件夹大小正确。 谢谢!

ls -l格式:

drwxr-xr-x 9 jerry jerry XXX.0K Mar 3 14:34 Flask-0.10.1 -rw-rw-r-- 1 jerry jerry 532K Mar 3 14:25 Flask-0.10.1.tar.gz drwxrwxr-x 10 jerry jerry XXXK Feb 8 15:41 leveldb1.15

重写在bash中的二维数组单元格

在共同locking文件中的竞争条件?

在Bash中工作时,如何处理“太多文件”问题?

在某些脚本执行grep时编辑文件有任何作用

如何在Shell中的variables内扩展variables

如何编写一个bash脚本来给另一个程序响应

启动nano编辑器通过pipe道命令

粗体字显示目录 – 如何启用? 与.bash_profile?

如何在使用bash更改名称和扩展名时将多个文件移动到目录?

如何检查手册页是否存在?

您可以使用find的-printf选项获取大部分信息 – 请参阅手册页获取更多信息。 我知道找到一个包含所有内容的目录的最简单的方法是使用du -s ,所以你必须将这些值打印/粘贴在一起。 例如:

paste <(find . -maxdepth 1 -printf "%M %u %c %pn") <(find . -maxdepth 1 -exec du -s {} ; | cut -f1 ) | column -t

示例输出

drwxrwxr-x ooh Thu Apr 3 07:07:45 2014 . 12260 -rw-rw-r-- ooh Thu Apr 3 07:07:41 2014 ./test.txt 5080 drwxrwxr-x ooh Thu Apr 3 07:07:54 2014 ./testdir 7140

所以:权限/所有者/日期/名称/大小以字节为单位

我不太确定这是你在找什么 – 但是从man ls :

–block-size =在打印尺寸前,按SIZE调整尺寸。 例如'–block-size = M'以1,048,576字节为单位打印大小。 请参阅下面的SIZE格式。

SIZE是一个整数和可选单位(例如:10M是10 * 1024 * 1024)。 单位是K,M,G,T,P,E,Z,Y(1024的幂)或KB,MB,…(1000的幂)。

编辑:根据你的评论,我会设置一个别名来得到一个输出,给你所需的数据,但打破了典型的ls格式 – 例如:

alias lsd="ls -l && du -h --max-depth 1"

结果:

$ lsd total 4 dr-xr-xr-x 4 user group 4096 Mar 12 2012 network 12K ./network 16K .

我不知道有什么办法只用ls来实现你的目标。

当然,还有更好的办法,但是这对我有用:

ls -l | while read f do echo -ne $( echo $f | cut -f -4 -d ' ') echo -ne " $(du -s $(echo $f | cut -f 9 -d ' ') | cut -f 1) "; echo $( echo $f | cut -f 6- -d ' '); done

引用@izx

该目录只是一个文件列表的链接。 所以你看到的大小不是文件夹占用的总空间,而是链接占用的空间。 文件或目录项/链接必须占用的最小大小是一个块,在大多数ext3 / 4文件系统上通常为4096字节/ 4K。

所以显示的最小尺寸只能是4.0k

你不能用ls来做。 但是,你可以试试这个,

ls -lhrt | awk '$1 ~ /^d/{"du -sh $9" | getline s; split(s,a," ");$5=a[1];}1'

做了一个类似于这个脚本(复制一些ls选项)之前,作出改变,应该在这里工作

#!/bin/bash [[ ! -d "$1" ]] && echo "Error $1 not a directory" 1>&2 && exit for f in "$1"/*; do f="${f##*/}" symlink= if [[ "$(stat -c '%h' "$f")" -gt 9 ]]; then string="$(stat -c "%A %h %U %G" "$f")" else string="$(stat -c "%A %h %U %G" "$f")" fi t="$(stat -c "%x" "$f")" date="$(date -d "$t" "+%-d")" if [[ $date -lt 10 ]]; then date="$(date -d "$t" "+%b %-d %H:%M")" else date="$(date -d "$t" "+%b %d %H:%M")" fi if [[ -h $f ]]; then size="$(ls -sh "$f" | cut -d ' ' -f1)" symlink="$f -> $(readlink "$f")" f= elif [[ -d $f ]]; then size="$(du -sh "$f" | cut -f1 2>&1)" f="$f/" elif [[ -f $f ]]; then size="$(ls -sh "$f" | cut -d ' ' -f1)" else echo "Error $f" 1>&2 && exit fi printf "%s %-4s %s %sn" "$string" "$size" "$date" "${f}$symlink" done

显然会比常规ls慢一点,因为它必须计算大小。

输出示例

> ./abovescript "./testdir" drwxrwxr-x 5 owner group 11M Apr 3 06:53 workspace/ -rwxrwxr-x 1 owner group 8.0K Mar 30 03:53 a.out lrwxrwxrwx 1 owner group 0 Apr 3 07:19 foo -> test/file

尝试:

du -b -d 1

这会将每个文件夹的磁盘使用率打印到1的深度,这相当于ls -al

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐