如何格式化ls的输出?

时间:2013-08-05 07:09:23

标签: linux bash

我想输出目录中的所有标题。每行有一个条目,每行应以四个空格开头,并且应以空格和'\'字符结尾。

____header1.h_\
____header2.h_\
____header3.h_\

我已经想出如何在每行输出一个条目。

ls -1 *.h

但我不知道如何进行格式化。我应该在哪里学习更复杂的格式?

编辑:

所有答案中的所有脚本都会产生所需的输出。我希望我能接受所有答案。

5 个答案:

答案 0 :(得分:8)

您可以使用printf和shell globbing,而不是尝试格式化ls输出。

尝试类似:

$ printf '    %s \\\n' *.h
    a.h \
    b.h \
    c.h \

ls实际上是人类的“互动”工具,避免将其用于其他任何工具。

答案 1 :(得分:4)

ls -1 *.h | sed 's/^/    /' | sed 's/$/ \\/'

或者,您可以说:

ls -1 *.h | sed 's/.*/    & \\/'

答案 2 :(得分:2)

ls -l *.h|awk '/\.h/{print "    "$0" \\"}'

或者在awk中以更简单的方式:

> ls -1 *.h | awk '$0="    "$0" \\"'

经过测试:

> ls -1 *.hh 
Algorithms.hh
Timer.hh
a.hh
> ls -1 *.hh | awk '/\.hh/{print "    "$0" \\"}'
    Algorithms.hh \
    Timer.hh \
    a.hh \
> 

或者您可以使用perl:

ls -1 *.h | perl -plne '$_="    ".$_." \\";'

答案 3 :(得分:1)

find . -maxdepth 3 -type f -iname "*" -printf "%h,%f,%CY-%Cm-%Cd %CT,%s,%u,%M\n"

答案 4 :(得分:0)

ls -l *.h|rev|ts "\\"|rev|ts "   "

(如果ls输出不是交互式终端,它将逐行显示文件名)