在当前目录中列出文件时如何排除目录?
ls .
^将在列表中包含目录。
试试这个:
find . -maxdepth 1 -not -type d
要完全等同于ls . 你不需要显示隐藏的dirs。
find . -maxdepth 1 -not -type d -and -not -name '.*'
这仍然留给你每个文件名的前缀“./”。 这不是一个真正的问题,但我认为这有点难看。 我跟着去了
ls -p | grep -v '/$'
这会让你看起来一样的列表,你也可以添加额外的ls参数。 添加一个--color=always ,你会得到你的dircolors,或者-a看到隐藏的文件。
我喜欢亚历山大的答案,因为他实际上依赖于文件的文件系统特性,所以它不会被愚弄。 我的答案会被一个具有'/'作为最后一个字符的文件所迷惑。 但是,这似乎是在惹麻烦。
尝试这个:
$ find。 -type f -maxdepth 1
或这个:
$ ls -p | egrep -v / $
$ ls -la | egrep -v ^ d
虽然这是一个旧post,但我认为这可能有帮助..
$ ls -l | grep -v ^ d
它将列出所有文件,包括符号链接,字符和块文件。
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
有了这个,你仍然可以使用任何其他选项。 或者…删除-v只列出目录。 或者…用任何其他文件typesreplace目录,该file理解和报告,如ASCII,空,ELF等等。
上面的“查找”解决scheme失去了ls的一些function – 例如:只列出文件,按降序修改时间sorting。
“ls -p | grep”的答案并不优雅地处理ls的其他元素,比如-R,如果他们需要的话
下面的答案,虽然比较详细,但在我看来,反映了最真实的行为和select“仅文件”的最大灵活性
ls -t . | while read line; do if [ -f $line ]; then echo $line fi done
只需根据需要replacels开关,结果将只返回文件。 如果还需要链接和其他项目,则需要做一些小的返工工作,以便纳入testing。