修改ls输出以在目录

时间:2017-02-11 20:18:23

标签: linux bash shell terminal ls

我正在寻找一种方法来修改 ls 输出,使每个目录在目录名前面显示 [+] 。理想情况下通过bashrc。

me@computer[~]$ ls 
[+]directory           [+]directory 
[+]directory           file.png
file                   file.txt 
readme   

目前我只是自定义颜色输出:

LS_COLORS=$LS_COLORS:'di=1;37;4' ; export LS_COLORS

3 个答案:

答案 0 :(得分:1)

这可能会对您有所帮助,但它只提供一个列输出:

ls | sed -r "$(find -maxdepth 1 -type d | cut -d/ -f2 | sed "1 d; 2~1 { s:.*:s/^\\(&\\)$/[+]\\\\1/;:g}")"

它通过管道lssed的输出来工作,sed脚本使用管道动态构建,该管道将目录列表转换为S/^dirname$/[+]dirname/; sed脚本行列表。

只需单独试用所有部件,看看它是如何工作的。

例如,当在/ etc中运行时,输出开始如下:

[+]acpi
adduser.conf
[+]adobe
[+]akonadi
aliases
aliases.db

您可能希望在bashrc中为命令添加别名。

您可能想要查看tree命令。

答案 1 :(得分:1)

您可以使用:

ls -l:目录将以d开头。 ls -p:斜杠将添加到目录名中,如dir /
ls -F:还会在目录名称和其他标记后添加斜杠到其他文件类型(*等) ls -d */:正如评论中所建议的那样,将仅列出末尾带有斜杠的目录名称。删除-d以查看子目录内容。

在操纵ls输出方面你可以像:

ls -l |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column

你也可以使用find并避免解析ls,因为据说如果文件名包含像新行等奇怪的字符,解析ls可能会中断。
此格式的find将生成与上述ls相同的输出:

find . -maxdepth 1 -printf '%Y %f\n' |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column

答案 2 :(得分:0)

你也应该尝试使用bash脚本

#!/usr/bin/env bash

myls() {
    for i in *;do
        [[ -d "${i}" ]]  && {
             printf "%s\n" "[+] ${i}"
             continue;
        }
        printf "%s\n" "${i}"
    done
}

.bashrc文件中提供脚本。每当您想要使用它时,只需在目录中调用myls

你应该注意它没有给你一个彩色输出