例如,如果我的目录包含文件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- *)文件名