【问题标题】:LIst of dirs without trailing slash "/"不带斜杠“/”的目录列表
【发布时间】:2012-01-28 10:12:57
【问题描述】:

我想要一个目录的列表(每行一个项目)。但最后一个字符是“/”

 ls /var/lib/mysql/ | grep -v "\."

这表明:

 wachuwar_funkfow/
 wachuwar_prueba/
 webdeard_arde/

我愿意

 wachuwar_funkfow
 wachuwar_prueba
 webdeard_arde

非常感谢帮助

【问题讨论】:

  • 您的ls 命令看起来像是别名,因为它通常不显示尾部斜杠。在 bash 提示符下输入 alias 并告诉我们是否有一行看起来像 alias ls='ls -F ...'

标签: linux bash sed awk


【解决方案1】:

很可能,您的 ls 被别名或定义为您的 .bashrc/etc/profile 或其他地方的函数。

试试ls的完整路径

/bin/ls /var/lib/mysql/ 

【讨论】:

  • 非常感谢。这是更好的解决方案,因为告诉我另一个问题 ls aliases...
【解决方案2】:

您可能已经为 ls 定义了别名。

要直接运行ls,运行\ls,例如

\ls /var/lib/mysql/

要查看别名,请运行:type ls

如果是这样,删除别名:

unalias ls

否则,这里是解决方法:

for dir in `ls -1 .`; do echo $dir; done

【讨论】:

    【解决方案3】:

    您应该检查ls 的别名。例如,

    $> alias ls
    alias ls='ls --color=auto'
    

    -F 标志会附加目录指示符,因此如果您不需要它,应将其从您的 ls 别名中删除。

    关于逐行ls 有可用的 -1 标志,所以它应该像

    ls -1 /var/lib/mysql/
    wachuwar_funkfow
    wachuwar_prueba
    webdeard_arde
    

    【讨论】:

      【解决方案4】:
      ls /var/lib/mysql/ | grep -v "\." | sed 's/\/$//'
      

      最后一个 sed 命令搜索以 / 结尾的行(反斜杠)并将其替换为空字符串。

      【讨论】:

      • 管道 grep 到 sed 是多余的;将 grep 重构为 sed 脚本。 ls | sed '/\./d;s%/$%%'
      【解决方案5】:

      如果你有一个命令也是别名,你可以绕过别名,直接用这些方法执行命令:

      ls            # runs the alias
      command ls    # runs the command
      \ls           # runs the command
      

      【讨论】:

        【解决方案6】:

        要排除名称中带有点的文件,您可以使用以下命令来代替grep -v

        shopt -s extglob
        \ls -d !(*.*)
        

        反斜杠绕过可能类似于以下之一的别名:

        alias ls=ls -F
        alias ls=ls -p
        alias ls=ls --classify
        alias ls=ls --file-type
        alias ls=ls --indicator-style=WORD
        

        其中“WORD”是slashfile-typeclassify 之一。

        【讨论】:

          猜你喜欢
          • 2015-09-20
          • 1970-01-01
          • 2019-01-26
          • 2021-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-10
          • 1970-01-01
          相关资源
          最近更新 更多