如何查找名称中含有 7 个字符(且没有扩展名)的文件?

如何查找名称中含有 7 个字符(且没有扩展名)的文件?

我想列出文件名中仅包含七个字符(不带扩展名)的文件。

我有这些文件在一个目录中,例如:

1234567
bar.12
dog.cat
1234567.txt
tst.new
big.tst
abcdefg
abcd.efg

我想使用该命令列出文件,ls以查找不带扩展名且恰好有 7 个字符的文件名。我希望输出看起来像这样:

$ ls <some kind of code>
1234567
abcdefg

我不喜欢使用任何类型的 glob 或命令find

答案1

这是一个使用 shell 通配符的解决方案(恰好 7 个不是 的字符.

ls [!.][!.][!.][!.][!.][!.][!.]

这是一个find使用正则表达式否定(不是文字.= [^\.])并指定字符数的解决方案{7}

find -maxdepth 1 -regextype posix-extended -regex '\./[^.]{7}'

这不是您所要求的,但我怀疑如果没有某种通配符或正则表达式是否可以完成它。

答案2

在 Bash 中:

 for f in ??????? ; do 
     [[ $f = *.* ]] && continue; 
     echo $f ;                     # do something useful here
 done

find

find -maxdepth 1 -name "???????" ! -name "*.*"

虽然你没有使用 glob 或 find 来请求,而是使用了“教授”这个词,他们可能在寻找ls | grep ...。但另请参阅避免使用的一些原因ls为了这。

答案3

使用扩展的 glob zsh

% ls
1234567  1234567.txt  abcdefg  abcd.efg  bar.12  big.tst  dog.cat  tst.new

然后

% setopt extended_glob
% ls (?~.)(#c7)
1234567  abcdefg
  • ?~.除以下字符之外的任何字符.
  • (#c7)相当于正则表达式量词的通配符{7}

zsh: 14 扩展

相关内容