【问题标题】:How can I get rid of the ./ and ../ in the ls output如何摆脱 ls 输出中的 ./ 和 ../
【发布时间】:2017-02-15 17:48:58
【问题描述】:

我想删除 .. 和 . ls 输出中的条目。但是,运行

ls . | sed '/^\.\./d;/^\.\//d'

对我不起作用(./ 还在这里),我不知道为什么。

【问题讨论】:

  • 顺便说一句,ls is not an appropriate tool for programmatic use;如果您遇到有趣的文件名或在行为与您进行测试的地方不同的平台上运行,尝试在您的软件中使用其输出导致错误。相反,如果您尝试以交互方式使用它,superuser.com 是解决有关使用工具而不是开发工具的问题的正确位置。
  • ls . 不显示. 的条目。或..ls 有别名吗?你的操作系统是什么?

标签: bash terminal sh ls


【解决方案1】:

ls-A 选项正是为此目的:

ls -A

来自man ls

-A, --almost-all
              do not list implied . and ..

【讨论】:

  • 值得注意的是,这是一个不受 POSIX 保证的 BSD 扩展。
  • @CharlesDuffy 在 GNU 系统上也可用。
  • “POSIX 不保证”旨在作为操作文本。是的,GNU 和 BSD 扩展之间有大量的交叉授粉。
【解决方案2】:

默认情况下ls 不会首先打印这些条目,也不会打印名称以. 开头的任何其他条目。它也不会在目录名称之后打印尾部斜杠。您的普通 ls 命令正在执行这些操作,这表明您的环境中有一个别名(很可能)或者可能是该名称的 shell 函数。您可以使用命令 alias -p 列出您的 shell 环境中的当前别名。

无论哪种方式,您都可以通过使用绝对路径:/bin/ls 来回避别名/函数而不将其删除。在别名的情况下,至少,您可以指定-A 选项来抑制...,但如果支持该(非标准)选项,则它对GNU 和BSD 的意义@ 987654329@ 那么它不会抑制其他点文件(这可能正是你想要的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2016-01-03
    • 2016-08-21
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多