在这里搜索词前后加星号有什么意义呢?
find ~ -name "*bash*"
到目前为止,我已经了解到星号表示查找前一个字符的零个或多个字符,那么它如何应用于这个命令,或者在这里完全不同?
答案1
如果没有它,您将要求 find 在您的 $HOME 目录 (~) 中搜索名为“bash”的文件;* 字符允许在“bash”之前和之后输入任何内容,这与单独的“bash”含义不同。
find ~ -name "bash"
会找到名为“bash”的文件,而不是 not my_bash_script
。bash 前后的 * 会改变含义,并允许它找到名为bash
and 的文件my_bash_script
,
答案2
您通过零个或多个字符指的是正则表达式 - 这是grep
和等工具使用的高级模式匹配awk
。
在命令中,星号 ( *
) 表示任意字符。该-name
标志仅在执行该匹配时查看文件名。
波浪符号 ( ~
) 表示用户的主目录,请注意 find 命令无法识别 if。调用该命令时,shell 将执行替换,调用该命令时将看到的内容类似于/home/jdoe
。
现在,find
(作为递归命令)将遍历/home/jdoe
(表示为~
)和主目录的每个子目录,与bash
其中包含单词的任何文件匹配,因此匹配的文件将是~/.bashrc
或~/.bashrc-local
甚至~/Pictures/wabash_2019.png
现在,如果您确实想使用正则表达式,那么这将由标志处理-regex
,其中此模式将意味着完全不同的东西,并且可能不会产生任何输出。我不会详细介绍正则表达式,因为关于这个主题有整本书。在这种情况下,正则表达式用于非常基本的模式匹配。