【问题标题】:Modify ls output to display [+] in front of directories修改ls输出在目录前面显示[+]
【发布时间】:2017-02-11 20:18:23
【问题描述】:

我正在寻找一种方法来修改 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

【问题讨论】:

  • 有一个选项已经几乎完成你想要的:ls -F 将不同的符号附加到不同的文件类型,例如 / 到目录,* 到可执行文件文件,@ 用于符号链接等。

标签: linux bash shell terminal ls


【解决方案1】:

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

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

它通过管道将ls 的输出传递到sed,并使用将目录列表转换为S/^dirname$/[+]dirname/; sed 脚本行列表的管道动态构建sed 脚本。

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

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

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

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

您可能想查看tree 命令。

【讨论】:

  • 可以添加管道到列
  • 你可以用-C强制列输出,但是因为单个单词的长度改变了,它可能会弄乱tab对齐。
  • 如果文件名包含换行符,这将失败,就像所有尝试解析 ls 的输出一样。
【解决方案2】:

你可以使用:

ls -l :目录将以 d 开头。 ls -p :将在目录名称中添加斜杠,例如 dir/
ls -F :还将在目录名称和其他文件类型(*等)的其他标记之后添加斜杠
ls -d */:作为在 cmets 中建议,将仅列出末尾带有斜杠的目录名称。删除 -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

【讨论】:

  • 不错。而且比我想出的要优雅得多。
  • 如果只想查看目录,使用ls */;无需解析ls的输出。
  • @chepner 好提示。只是为了记录,ls */ 也会扩展目录内容,屏幕变得混乱。可以用ls -d */ 限制只显示目录名称。
  • @LarsFischer 谢谢!
【解决方案3】:

您也应该使用 bash 脚本尝试此操作

#!/usr/bin/env bash

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

在您的.bashrc 文件中获取脚本。每当您想使用它时,只需在目录中调用myls即可。

你应该注意它不会给你一个彩色输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 2016-06-18
    • 1970-01-01
    • 2013-03-19
    • 2020-09-15
    • 2013-05-20
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多