在目录中,我有类似的文件
lazer_100506
lazer_100707
lazer_091211
lazer_110103
lazer_100406_temp
lazer_100622#delete
ETC
如何获取仅包含前四个文件的列表?
$ ls lazer_......
ls: lazer_......: No such file or directory
$
答案1
有多种方法:
ls
仅有的
ls lazer_??????
ls
和egrep
ls | egrep '^lazer_.{6}$'
find
find . -regextype posix-egrep -regex '^./lazer_.{6}$'
答案2
你zsh
可以使用像这样的 glob?(#cN)
(这里的c
标志要求前一个?
与时间完全匹配N
):
setopt extendedglob
print -rl -- ?(#c12)
如果你更喜欢ls
:
ls -d -- ?(#c12)
您还可以添加限定符,例如递归搜索具有固定名称长度的常规文件:
print -rl -- **/?(#c12)(.)
答案3
和ksh93
:
printf '%s\n' {12}(?)
对于名称由 12 个字符组成的(非隐藏)文件。
或者,如果您更喜欢正则表达式:
printf '%s\n' ~(E)^.{12}$
答案4
另一种解决方案是使用echo
命令。
echo lazer_??????
请注意,正则表达式处理是由运行命令的shell
任何内容完成的。echo