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

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

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

ls .

^ 将包含列表中的目录。

答案1

尝试一下这个:

find . -maxdepth 1 -not -type d

答案2

为了获得完全等同的效果,ls .您需要不显示隐藏目录。

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

并且每个文件名前面仍带有 './'。这不是什么大问题,但我觉得有点丑。我选择了:

ls -p | grep -v '/$'

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

我喜欢 Alexander 的回答,因为他实际上依赖于所讨论文件的文件系统特性,因此永远不会被欺骗。我的答案会被名称中最后一个字符为“/”的文件欺骗。但这似乎是自找麻烦。

答案3

虽然这是一篇旧帖子,但我认为这可能会有所帮助。

$ ls -l |grep -v ^d

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

答案4

上面的“查找”解决方案失去了ls- 例如:仅列出文件,按修改时间降序排列。

“ls -p | grep” 的答案不能很好地处理 ls 的其他元素,例如 -R 如果需要的话

以下答案虽然比较冗长,但我认为反映了最真实的ls行为和选择“仅文件”的最大灵活性

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

只需根据需要替换 ls 开关,结果将仅返回文件。如果还需要链接和其他项目,则需要对测试进行少量修改才能纳入。

相关内容