Linux 列出以一个或两个数字字符和破折号开头的文件
我想选择当前文件夹中以一个或两个数字字符开头的所有文件。 e、 g: 我想知道如何仅选择以2个数字字符开头的文件 到目前为止我已经试过了Linux 列出以一个或两个数字字符和破折号开头的文件,linux,bash,find,Linux,Bash,Find,我想选择当前文件夹中以一个或两个数字字符开头的所有文件。 e、 g: 我想知道如何仅选择以2个数字字符开头的文件 到目前为止我已经试过了 $ find . -name '[0-9]{1,2}*' 但它没有返回任何东西,我不明白为什么。我在编写此命令时的推理是: [0-9] select any string starting with a number from 0 to 9 {1,2} and this can be repeated 1x or 2x 我做错了什么 到目
$ find . -name '[0-9]{1,2}*'
但它没有返回任何东西,我不明白为什么。我在编写此命令时的推理是:
[0-9] select any string starting with a number from 0 to 9
{1,2} and this can be repeated 1x or 2x
我做错了什么
到目前为止,我的不雅解决方案
运行以下两个命令,首先处理[0-9]范围,然后处理[10-99]范围
$ find . -name '[0-9]-*'
$ find . -name '[0-9][0-9]-*'
您可以将gnu查找与-regex选项一起使用:
找到-maxdepth 1-类型f-正则表达式“*/[0-9][0-9]?-*”
详情:
-maxdepth 1:仅在当前目录中
-类型f:仅匹配文件
-正则表达式“.*/[0-9][0-9]?-.*”:匹配文件名开头的1或2位数字,然后再匹配-
如果您没有gnu find,则可以使用:
找到-maxdepth 1-类型f \-name'[0-9][0-9]-*'-o-名称'[0-9]-*'\
您可以将gnu查找与-regex选项一起使用:
找到-maxdepth 1-类型f-正则表达式“*/[0-9][0-9]?-*”
详情:
-maxdepth 1:仅在当前目录中
-类型f:仅匹配文件
-正则表达式“.*/[0-9][0-9]?-.*”:匹配文件名开头的1或2位数字,然后再匹配-
如果您没有gnu find,则可以使用:
找到-maxdepth 1-类型f \-name'[0-9][0-9]-*'-o-名称'[0-9]-*'\
在初始代码中,您试图使用正则表达式,其中的s-name希望您使用shell 使用-name“[0-9]*”的原始不雅解决方案将失败,因为[0-9]*匹配所有以数字开头的文件,而不仅仅是那些只有一个数字的文件。更新后的解决方案应能更好地工作,并可作为单个命令编写:
find \( -name '[0-9]-*' -o -name '[0-9][0-9]-*' \) ...
或者,使用POSIX find,您可以搜索以数字开头但不包括第三个字符为数字的文件名:
find . -type f -name '[0-9]*' ! -name '??[0-9]*'
如果您的查找没有-maxdepth选项,则不下降到子目录稍微复杂一些:
!-名称匹配除起始目录之外的所有内容。对它们应用-prune可以避免子目录下降。在初始代码中,您试图使用正则表达式,其中的s-name希望您使用shell 使用-name“[0-9]*”的原始不雅解决方案将失败,因为[0-9]*匹配所有以数字开头的文件,而不仅仅是那些只有一个数字的文件。更新后的解决方案应能更好地工作,并可作为单个命令编写:
find \( -name '[0-9]-*' -o -name '[0-9][0-9]-*' \) ...
或者,使用POSIX find,您可以搜索以数字开头但不包括第三个字符为数字的文件名:
find . -type f -name '[0-9]*' ! -name '??[0-9]*'
如果您的查找没有-maxdepth选项,则不下降到子目录稍微复杂一些:
!-名称匹配除起始目录之外的所有内容。对它们应用-prune可以避免子目录下降。不需要查找
$ touch 7-foo 42-bar 69-baz
你不需要为此找到
$ touch 7-foo 42-bar 69-baz
抱歉,我的解决方案中缺少破折号。所以它不是所有的都匹配。我现在更正了,它的名字是一个模式,而不是正则表达式。看看您的find版本是否支持像GNU find那样的-regex。不,它不支持。这个答案太笼统了,文件名以数字开头。我的问题是:文件以一个或最多两个数字字符开头。除此之外,这里提供的答案比另一篇文章中的答案有更多的信息可以更好地解释,这有助于我理解更多的内容。很高兴问了这个问题。对不起,我的答案中没有破折号。所以它不是所有的都匹配。我现在更正了,它的名字是一个模式,而不是正则表达式。看看您的find版本是否支持像GNU find那样的-regex。不,它不支持。这个答案太笼统了,文件名以数字开头。我的问题是:文件以一个或最多两个数字字符开头。除此之外,这里提供的答案比另一篇文章中的答案有更多的信息可以更好地解释,这有助于我理解更多的内容。很高兴问了这个问题。对不起,我忘了在我的答案中添加破折号“-”。我现在更正了它。在我的理解中,glob=通配符。这里你所说的glob是:POSIX-basic?我说得对吗?如果是这样的话,我同意你的看法,我相信find在通过POSIX ExtendedDo谢时期待POSIX basic,我的答案更准确了,抱歉,我忘了在我的解决方案中添加破折号“-”。我现在更正了它。在我的理解中,glob=通配符。这里你所说的glob是:POSIX-basic?我说得对吗?如果是这样,我同意你的看法,我相信find在通过POSIX ExtendedThank时需要POSIX basic,我已经让我的答案更精确了,因为它即使没有正则表达式模式也能工作。你知道为什么吗?是的,我们可以删除-regextype awk,因为我们在这里不使用任何扩展正则表达式。我已经在回答中做了更正,添加了一个连字符。因为它即使没有正则表达式模式也能工作。你知道吗
为什么?是的,我们可以删除-regextype awk,因为我们在这里不使用任何扩展正则表达式。我已经更正了添加连字符的答案。我不想打印文件,而是用find选择它们,这样用另一个命令更容易输出。如果我没有弄错的话,管道化printf的唯一方法是将输出写入一个临时文件,然后用另一个命令读取这个临时文件,对吗?printf在这里是演示的。你可以在任何命令中使用这些glob。我不想打印文件,而是用find选择它们,这样用另一个命令输出就更容易了。如果我没有弄错的话,管道化printf的唯一方法是将输出写入一个临时文件,然后用另一个命令读取这个临时文件,对吗?printf在这里是演示的。您可以将这些glob与任何命令一起使用。
$ shopt -s nullglob
$ printf '%s\n' {0..99}-*
7-foo
42-bar
69-baz