列出文件时如何排除目录?

Ste*_*ins 29 ubuntu shell ls

列出当前目录中的文件时如何排除目录?

ls .
Run Code Online (Sandbox Code Playgroud)

^ 将在列表中包含目录。

Ale*_*ysh 29

试试这个:

find . -maxdepth 1 -not -type d
Run Code Online (Sandbox Code Playgroud)

  • 不。(1)它将是递归的,(2)它不会列出符号链接。@Steve 要求在没有目录的情况下与 `ls .` 等效 - 这就是它。 (11认同)
  • 保持简单: $ find 。-f型 (6认同)
  • 添加 `-ls` 或 `-exec ls -l {} \;` 会使它像没有目录的 `ls -l` 一样。 (2认同)

Sea*_*ary 23

为了让它完全等同于ls .你需要不显示隐藏的目录。

find . -maxdepth 1 -not -type d -and -not -name '.*'

这仍然给你留下了'./'前缀到每个文件名。这不是一个真正的问题,但我认为这有点丑陋。我去了:

ls -p | grep -v '/$'

这将为您提供一个看起来相同的列表,您也可以添加其他ls参数。添加一个--color=always,您将恢复您的目录颜色,或者-a查看隐藏文件。

我喜欢亚历山大的回答,因为他实际上依赖于所讨论文件的文件系统特征,因此它永远不会被愚弄。我的答案会被名称中最后一个字符为“/”的文件所迷惑。但这似乎是在自找麻烦。

  • @JiriXichtkniha -not 的 POSIX 替代方案是什么? (2认同)

jam*_*zed 5

尝试这个:

$ 查找。-maxdepth 1 - 类型 f

或这个:

$ ls -p | egrep -v /$

$ ls -la | egrep -v ^d


san*_*s85 5

虽然这是一篇旧文章,但我认为这可能会有所帮助..

$ ls -l |grep -v ^d

它将列出所有文件,包括符号链接、字符和块文件。