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
启动nano编辑器通过pipe道命令
用粗体字体显示目录 – 如何启用? 与.bash_profile?
如何检查手册页是否存在?
您可以使用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] 举报,一经查实,本站将立刻删除。