如何格式化ls的输出?

Mar*_*dik 3 linux bash

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

____header1.h_\
____header2.h_\
____header3.h_\
Run Code Online (Sandbox Code Playgroud)

我已经想出如何使每行输出一个条目.

ls -1 *.h
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Mat*_*Mat 9

你可以使用printf和shell通配而不是尝试格式化ls输出.

尝试类似的东西:

$ printf '    %s \\\n' *.h
    a.h \
    b.h \
    c.h \
Run Code Online (Sandbox Code Playgroud)

ls 对于人类而言,它实际上是一种"互动"工具,避免将其用于其他任何事物.


小智 8

find . -maxdepth 3 -type f -iname "*" -printf "%h,%f,%CY-%Cm-%Cd %CT,%s,%u,%M\n"
Run Code Online (Sandbox Code Playgroud)


dev*_*ull 5

ls -1 *.h | sed 's/^/    /' | sed 's/$/ \\/'
Run Code Online (Sandbox Code Playgroud)

或者,你可以说:

ls -1 *.h | sed 's/.*/    & \\/'
Run Code Online (Sandbox Code Playgroud)


Vij*_*jay 3

ls -l *.h|awk '/\.h/{print "    "$0" \\"}'
Run Code Online (Sandbox Code Playgroud)

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

> ls -1 *.h | awk '$0="    "$0" \\"'
Run Code Online (Sandbox Code Playgroud)

测试:

> ls -1 *.hh 
Algorithms.hh
Timer.hh
a.hh
> ls -1 *.hh | awk '/\.hh/{print "    "$0" \\"}'
    Algorithms.hh \
    Timer.hh \
    a.hh \
> 
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 perl:

ls -1 *.h | perl -plne '$_="    ".$_." \\";'
Run Code Online (Sandbox Code Playgroud)