如何在列出当前目录中的文件时排除目录?
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 开关,结果将仅返回文件。如果还需要链接和其他项目,则需要对测试进行少量修改才能纳入。