2017-02-11 55 views
3

我正在寻找一种方式来修改这种方式,LS输出前显示[+],每一个目录显示[+]在目录名的前面。理想的做法是通过bashrc。修改LS输出到目录

[email protected][~]$ ls 
[+]directory   [+]directory 
[+]directory   file.png 
file     file.txt 
readme 

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

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

目前已经不* *几乎你想要的一个选项:'LS -F'附加不同的符号来不同的文件类型,如'/'到目录,'*'到可执行文件,'@'符号链接等等。 –

回答

2

这可以帮助你,但它给你只有一列输出:

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脚本l INES。

只需单独尝试所有部件以了解其工作原理。

例如在/ etc输出开始运行时,喜欢这样的:

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

你可能想在你的.bashrc别名命令。

你可能想看看tree命令。

+3

可以添加管道到列 – setempler

+1

您可以用'-C'强制输出列,但由于单个单词的长度发生了变化,它可能会混淆标签对齐。 –

+2

如果文件名包含换行符,这将失败,就像所有尝试解析'ls'的输出一样。 – chepner

2

您可以使用:

ls -l:目录将开始d。 ls -p:斜杠将被添加到像dir目录名称/
ls -F:也将dir名称和其他标识为其他文件类型(*等)后,添加斜线
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 
+0

NIce。比我想出来的更优雅。 –

+0

如果您只想查看目录,请使用'ls * /';不需要解析'ls'的输出。 – chepner

+2

@chepner好的提示。只是为了记录,'ls * /'也会扩展目录内容,并且屏幕变得混乱。可以用'ls -d * /'限制显示只有目录名称。 –

1

你也应该尝试这使用bash脚本

#!/usr/bin/env bash 

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

源代码在您的.bashrc文件中的脚本。无论何时你想使用这个,只需在目录中调用myls

你要注意,它不会给你一个彩色输出