如何使用 ls 搜索具有固定名称长度的文件?

如何使用 ls 搜索具有固定名称长度的文件?

在目录中,我有类似的文件

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_??????

lsegrep

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

相关内容