我正在寻找一种方法来修改 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
答案 0 :(得分:1)
这可能会对您有所帮助,但它只提供一个列输出:
ls | sed -r "$(find -maxdepth 1 -type d | cut -d/ -f2 | sed "1 d; 2~1 { s:.*:s/^\\(&\\)$/[+]\\\\1/;:g}")"
它通过管道ls
到sed
的输出来工作,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
。
你应该注意它没有给你一个彩色输出