find 不起作用,locate 起作用

Fab*_*bby 0 bash arch-linux find locate manjaro

所以我有这个:

systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" "
Run Code Online (Sandbox Code Playgroud)

作为输出给出:

NetworkManager-dispatcher.service
NetworkManager-wait-online.service
NetworkManager.service
Run Code Online (Sandbox Code Playgroud)

我有一点:

find / -name NetworkManager-dispatcher.service 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

具有以下输出:

/usr/lib/systemd/system/NetworkManager-dispatcher.service
Run Code Online (Sandbox Code Playgroud)

然而,

find / -name $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ") -print 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

什么都不给,而:

locate $(systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" ")
Run Code Online (Sandbox Code Playgroud)

显示:

/etc/systemd/system/multi-user.target.wants/NetworkManager.service
/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service
/usr/lib/systemd/system/NetworkManager-dispatcher.service
/usr/lib/systemd/system/NetworkManager-wait-online.service
/usr/lib/systemd/system/NetworkManager.service
/usr/lib/systemd/system/NetworkManager.service.d
/usr/lib/systemd/system/NetworkManager.service.d/NetworkManager-ovs.conf
Run Code Online (Sandbox Code Playgroud)

为什么哦为什么没有 find 找到任何东西??? ;-)

在你问“那你为什么不使用 locate 之前?” ,答案是:我在 Manjaro 并且locate不是标准的,而find...

Kam*_*ski 6

为什么哦为什么没有find找到任何东西???

放下2>/dev/null并查看错误。这将是:

find: paths must precede expression: NetworkManager-wait-online.service
Run Code Online (Sandbox Code Playgroud)

-name只需要一个参数,你提供三个。第一个被接受。第二个未被识别为表达式的有效部分,因此find假设它是一个路径,(如/您提供的);但是“路径必须在表达式之前”。

调用在语法上是错误的,它只是失败而不是“什么也没找到”。

另一方面,locate可以很容易地采用多个模式。这并不意味着它完美无缺。不加引号往往$()错误的。在这里,您希望拆分输出,但可能会出现其他问题。