【问题标题】:How to find files whose name starts with "a"?如何查找名称以“a”开头的文件?
【发布时间】:2013-02-26 21:10:07
【问题描述】:

我知道我遗漏了一些明显的东西,我确定这与我的 -name 部分有关。

这是家庭作业,但我认为我非常接近正确答案。更好的写作方式也总是受到赞赏!

find /home/caine/thecopy -user caine -size -10240c -name ^a.* | wc 

这给出了 0 0 0wc,删除名称表达式会产生大量计数。

我试过 ^a 、 '^a' 、 '^a.*' ,都得到 0 个结果。 TIA 伙计们。 :)

【问题讨论】:

    标签: bash shell find


    【解决方案1】:

    你需要把文件名换行:

    find /home/caine/thecopy -user caine -size -10240c -name "a.*" | wc
    #                                                        ^   ^
    

    【讨论】:

    • 我认为它不需要^(除非它是文件名的一部分)
    • +1,否则表达式扩展为当前工作目录中以a 开头的文件名。
    • 关于你的评论,@user000001,他可能需要^,以防他希望文件以a开头...
    • @fedorqui 我刚刚在这里测试了它,^ 它没有匹配任何东西。没有它匹配任何以a. 开头的东西。也许它只是我的 bash 版本。
    • 操作,这很有趣@user000001!我这里没有外壳,所以我将根据您的建议编辑我的答案,明天会检查。谢谢你让我知道:)
    【解决方案2】:

    -name 的参数是一个 shell 模式,不是一个正则表达式。 ^. 字符将匹配文字 ^. 字符,而不是分别匹配名称和任何字符的开头,就像它是正则表达式一样。

    如果你想匹配以'a' 开头的文件名,这应该可以:

    find /home/caine/thecopy -user caine -size -10240c -name 'a*' | wc 
    

    a* 周围的引号(单引号或双引号)很重要;没有它们,shell 将在 find 看到它之前扩展该模式。

    如果真的要匹配正则表达式,可以将-name替换为-regex;这是一个特定于 GNU 的扩展。但在这种情况下,shell 模式可能就足够了。

    注意:我假设您要匹配名称以 a 开头的文件;你实际上并没有这么说。

    【讨论】:

    • 宾果游戏!是的,我仍然误用何时何地使用正则表达式字符。 :/ 非常感谢你们的帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多