AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1250745
Accepted
user1046658
user1046658
Asked: 2020-06-16 19:58:42 +0800 CST2020-06-16 19:58:42 +0800 CST 2020-06-16 19:58:42 +0800 CST

find -name "*.mp3" 中的星号和句点有什么作用?

  • 772

在find -name "*.mp3".mp3 之前有一个星号。不*匹配它之前的字符多次吗?但是星号前面没有任何东西,那么它是做什么的*呢?还是因为find命令没有使用正则表达式?那么,..mp3 中的是正则表达式字符还是find只是将其解释为要匹配的句点?

command-line find
  • 3 3 个回答
  • 3498 Views

3 个回答

  • Voted
  1. Best Answer
    Eliah Kagan
    2020-06-16T20:04:45+08:002020-06-16T20:04:45+08:00

    -name谓词采用glob ,而不是正则表达式。

    在正则表达式中,*将匹配零个或多个前面的项目。但由于这是一个 glob,它匹配零个或多个任何字符。也就是说,在 glob 中的含义与在正则表达式中*的含义相同。.*

    在正则表达式中,.将完全匹配任何字符之一。但由于这是一个 glob,它没有被特殊对待,只是匹配一个文字.字符。也就是说,在 glob 中的含义与或在正则表达式中.的含义相同。\.[.]

    如果您确实想匹配 glob 中任何字符的单次出现,您可以使用?. 在 glob 中,与正则表达式中的?含义相同。.这与正则表达式完全不同,?正则表达式匹配零个或一个前面的项目(即,使前面的项目可选)。

    在 glob 和正则表达式中几乎相同的唯一语法是包含在[ ]. 例如,[aeiou]匹配任何字符a, e, i, o, 或u. 如果您编写了一个[ ]在大多数正则表达式方言中都有效的 - 分隔字符类,那么在 glob 中使用时它也可能是具有相同含义的字符类。


    除了作为find's-name和-iname谓词的操作数之外,另一个广泛使用 glob 的地方是你的 shell。不带引号的通配元字符由您的 shell 自动扩展为与它们匹配的文件名相对应的单独参数列表。

    这就是为什么在将这种模式传递给find. 如果你不这样做,你的 shell 将尝试扩展它。如果您的外壳确实扩展了它,find则不会看到模式本身,而是看到其扩展的结果。这是不可取的,而且经常令人困惑。

    请注意,您的 shell(可能是 bash,但通常适用于 Unix 样式的 shell)作为其默认行为,不会扩展?或*匹配文件名中的前导点。例如,除非您告诉它以其他方式运行,否则您的 shell 会扩展?为当前目录中的一个字符长的文件名,而不是.,即使.条目始终存在。它扩展*到当前目录中不以 . 开头的文件名.。(在 bash 中,shopt -s dotglob将为您运行它的 shell 实例更改此设置,并shopt -u dotglob恢复默认行为。)只有前导点是特殊的,而不是其他点。

    这与find's-name和-iname谓词的行为不同,其中?和*总是允许匹配前导.。

    • 44
  2. The Daleks
    2020-06-18T05:00:51+08:002020-06-18T05:00:51+08:00

    星号(通常称为“通配符运算符”)表示find应该返回所有带有.mp3扩展名的文件。

    • 1
  3. waltinator
    2020-06-17T09:19:34+08:002020-06-17T09:19:34+08:00

    因为您使用双引号,所以bash尝试扩展"*.mp3"glob。

    *.mp3如果当前目录中有一些文件,它们的名称将替换glob。

    为了演示,echo在行首放一个,例如echo find ...。

    如果使用单引号 ( '),则不执行全局扩展。

    使用“ '*.mp3'”代替“ "*.mp3"”。

    • -9

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve