我想列出文件名中仅包含七个字符(不带扩展名)的文件。
我有这些文件在一个目录中,例如:
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}