![选择以 $LETTER 开头或字母表中晚于 $LETTER 的字母的文件](https://linux22.com/image/843/%E9%80%89%E6%8B%A9%E4%BB%A5%20%24LETTER%20%E5%BC%80%E5%A4%B4%E6%88%96%E5%AD%97%E6%AF%8D%E8%A1%A8%E4%B8%AD%E6%99%9A%E4%BA%8E%20%24LETTER%20%E7%9A%84%E5%AD%97%E6%AF%8D%E7%9A%84%E6%96%87%E4%BB%B6.png)
假设一个目录包含以下文件:
- 文件1
- 文件2
- b文件
- .c文件
- 文件
- 文件2
- q文件
- 兹文件
我正在寻找一种简单的方法来选择所有以 $LETTER 开头的文件,或者以字母表中晚于 $LETTER 的字母开头的文件。可以轻松修改以查找以 $LETTER 开头的文件或以字母开头的文件的解决方案早些时候比字母表中的 $LETTER 有用。
例如,在上面的列表中,LETTER=c,我想选择“cfile,ffile,ffile2,qfile,zfile”
上面是一个简化的例子。在现实世界中,该目录将包含数千个文件。最后我使用了ls | tail -n${FUDGE_FACTOR}
手动发现软糖因子的方法,但我正在寻找一种自动执行此操作的方法。
我正在寻找一个基于 shell 的解决方案(我使用 BASH,但欢迎使用其他 shell 中的解决方案)。我知道 shell 脚本可能不是完成此任务的最佳工具,但我提出这个问题纯粹是出于兴趣(了解有关 shell 脚本的更多信息),所以请不要在 python/perl/lua/$ 中回复答案FAVE_SCRIPTING_LANGUAGE
关于 shell 脚本对于此类任务的限制的一般评论,以及在现实中解决这些限制的最佳方法(即没有我的“必须是基于 shell 的解决方案”规定),将是最受欢迎的。
谢谢
答案1
答案2
使用 shell 的内置通配符怎么样?
LETTER=c; echo [$LETTER-z]*
这对我来说在 bash 和 ksh 中有效。
答案3
您可以使用这样的脚本:
START=c
END=q
ls | egrep ^[$START-$END].*
这将选择以 c 到 q 开头的所有文件。
示例输出:
[gbeech@svr01 test]$ echo ^[$START-$END].*
^[c-q].*
[gbeech@svr01 test]$ ls | egrep ^[$START-$END].*
cfile
ffile
ffile2
qfile
它也可以扩展以限制 grep,几乎可以通过调整正则表达式来执行任何操作。