Hol*_*ock 4 shell find quoting wildcards
在 上Ubuntu 14.04, 64 bit,我已设置/lib/modules/4.2.0-27-generic/kernel/drivers为我的当前目录。我打算搜索所有net作为子字符串存在的文件。如果我使用 的正则表达式进行搜索,则*net*仅./net返回目录作为搜索结果。但是,如果我指定确切的文件名,那么它只会列出相关的文件(没用,因为我并不总是知道要交叉检查的确切文件名)。
$ find . -name *net*
./net
$ find . -name *usbnet*
./net/usb/usbnet.ko
$ pwd
/lib/modules/4.2.0-27-generic/kernel/drivers
Run Code Online (Sandbox Code Playgroud)
我犯了什么错误?
hee*_*ayl 10
因为当您使用 just *net*(没有任何引用或转义)时,它会net在find命令运行之前被 shell 扩展为当前目录中的(现有)文件/目录。所以命令变成:
find . -name net
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它只是匹配net,所以usbnet.ko不会被匹配。
另请注意,在不引用和转义的情况下,如果模式不匹配(并且nullglob和failglob选项被禁用),则将其视为is。因此,例如,对于find . -name *net*,如果net当前目录中不包含文件名,则模式 find 获取的是*net*。
所以要解决这个问题,你需要避免 shell globbing,为此你可以使用引用或转义 glob 模式:
find . -name '*net*'
find . -name "*net*"
find . -name \*net\*
Run Code Online (Sandbox Code Playgroud)