【问题标题】:A question about command "find"关于命令“find”的问题
【发布时间】:2009-03-14 15:31:43
【问题描述】:
找到 . \( -name "_*" -or -newer while2 \) -type f -print

在上面的linux命令中,为什么要引用_*?

【问题讨论】:

  • 类似问题:stackoverflow.com/questions/18836/why-doesnt-find-find-anything>

标签: linux shell command-line


【解决方案1】:

首先,shell 扩展所有不带引号的 * 以匹配本地目录中的文件名。

之后,shell 使用该文件名列表运行 find 命令。

通常,您不希望 shell 在本地目录中执行 '*' 通配符。一般情况下,你使用 find 命令在其他目录中进行文件名匹配。

shell 在运行命令之前还有其他几件事情要做。 $VARIABLE 替换就是其中之一。

【讨论】:

    【解决方案2】:

    为什么要引用 _* ?

    如果不是,您的 shell 可能会扩展 * 以替换为当前目录中的文件。这可能不是你想要的。

    【讨论】:

    • 对,因为 find 命令会展开 * glob 操作符。
    • 问题是shell在find命令得到它之前扩展它
    【解决方案3】:

    如果你不引用它,shell (bash?) 会尝试扩展。如果当前目录中有任何以 '_' 开头的文件,您会得到如下信息:

    find . \(-name _somefile _someother _file3 .... -or -newer while2 \) -type f -print
    

    当然不是你想要的。我总是引用模式,只是为了确保 shell 不会弄乱它们

    【讨论】:

    • 当我使用 find 。 -name c*,它找到的匹配项比 find 少。 -名称“c *”。为什么?
    • 可能你有一个以 c 开头的单个文件,find 命令会获取所有具有完全相同名称的文件,而不是其他以 c 开头的名称
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多