在Unix中,是否可以在起点之后列出目录条目?

例如,如果我的目录包含文件a,b,c,c1,c2,c3,c4,d,e,f,g

有没有像下面的伪代码的命令

ls -filename>“c2”

那只会列出文件c3,c4,d,e,f

编辑:修改问题来解决一个更一般的情况

啊 – 你的意思是你要在一个词汇顺序中search。 用这个:

ls | awk '$1 >= "c3" && $1 <= "f" {print;}' 

在bash中,你可以做如下的事情:

$ ls [df] *

或者你可以写一个shell脚本。

使用正则expression式:

 ls | egrep "[dz].*" 

对于像你这样的奇怪请求,通常是这种情况。 你要求ls做一些非常不寻常的事情,包括理解目录名的词法结构。

去正则expression式: regular-expressions.info

并input:

 man grep 

阅读grep的手册页。

使用grep命令,可以进行任何types的过滤。 熟悉Windows中的FIND命令。 以下是一个选项。 如果你想得到一个完整的列表,就像你用“ls -l”得到的那样,那么你可能不得不把它和AWK结合起来。

 > ls -1 | grep ^[def] 

沿着前面的答案:

使用shell的文件名扩展而不是使用egrep:

 ls [dz]* 

ls | grep -A 1000000'^ c2 $'| 尾巴-n +2

grep给你的线和下一个百万; 尾巴切断了第一条线。

如果你想要一个长版本,在最后join“| xargs ls -l”就行了。

限制:这不适用于时髦的文件名(特别是带有换行符的文件名,但可能在空格,控制字符等方面有问题)。 如果目录中有超过一百万个文件,它将不起作用。

是不是确定的答案,但这应该工作。

 ls -1 | while read f ; do [[ "$f" > "g2" ]] && echo $f ; done 

使用“$(echo $ f | tr [AZ] [az])”可能会更进一步,所以它会忽略大小写。 这只适用于ASCIIstring,它将无法订购Unicode(或iso- *)文件名