在我的FreeBSD 10.1上,我写了一小段基本上调用ls
的代码,并自动将结果分解为:
directory:
2.4M .git
528K src
380K dist
184K test
file:
856K CONDUCT.md
20K README.md
........
您只需要列出目录和常规文件,而不必列出.
..
,但您必须列出隐藏文件,并从中排序分别从大到小。
挑战在于将作为单行命令完成,而不使用 $(cmd)
,&&
,||
,>
,{{ 1}},>>
,<
,;
以及12个管道(后引号也计算在内)。
目前我的进展是:
&
仅打印到最后一个目录项。但由于整个命令将在每条记录中输出一次,因此我无法找到仅打印 ls -Alh | sort -d -h -r |
awk 'BEGIN {print "Directories:"}
NR>1 {if(substr($1,1,1)~"d")print" "$5" "$9}'
一次的方法,然后打印出剩余的输出。
答案 0 :(得分:0)
好吧,您可能必须将文件存储在一个数组中并在最后打印:
ls -Alh|sed 1d|
sort -h -k5r|
awk 'BEGIN {print "Directories:"}
/^d/{print "\t"$5"\t"$9}
/^-/{f[n++]=sprintf("\t"$5"\t"$9)}
END{print "Files:";
for(i=0;i<n;++i)print f[i]}'
您需要解决的另一个问题是:文件和目录可能在名称中包含空格,而简单的$9
则不足以满足这种情况。