2016-09-19 79 views
0

我需要显示文件大小和文件名。就像这样:在ls -l输出中删除多个空格

4.0K Desktop 

我使用的是从ls -l命令减产提取这两个领域:

ls -lhS | cut -d' ' -f5,9 

由于在ls -l输出多个空格,我得到了几个错误的输出,如:

4.0K 19:54 
4.0K 19:55 
6 
18:39 
31 
25 

我该如何解决这个问题?

我需要使用管道而不是bash脚本来完成这个任务(输出可能是多个管道),最好是没有sed,awk。

如果没有sed或awk的替代选项可用,则可以使用sed。

+2

为什么不使用'du-sh *'? – Sundeep

+0

你有没有试过把它交给'tr -s''然后解析? – AKJ88

+0

@spasic:你应该把它当作答案。 –

回答

1

您可以在使用cut之前使用translate字符命令。

ls -lhS | tr -s ' ' | cut -d' ' -f 5,9 
2

can avoid parsing ls output并使用stat命令作为GNU coreutils的一部分在bash中获取详细的文件信息。

# -c --format=FORMAT 
#   use the specified FORMAT instead of the default; output a newline after each use of FORMAT 

# %n  File name 
# %s  Total size, in bytes 

stat -c '%s %n' * 
+0

嘿,我得到了这个'统计:不能统计'%n':没有这样的文件或目录 统计:不能统计'*':没有这样的文件或目录' –

+0

@PS。使用'stat -c'%s%n'*' – heemayl

+0

@heemayl:很好,很有帮助,谢谢。 :) –

0

或者你可以只提交给AWK:

$ ls -lhS | awk '$0=$5 OFS $9' 

即。替换整个记录$0,字段$5$9由输出字段分隔符OFS分隔。