find 不起作用,locate 起作用

find 不起作用,locate 起作用

所以我有这一点:

systemctl list-unit-files | grep --ignore-case networkmanager | grep --ignore-case service | cut --fields=1 --delimiter=" "

输出如下:

NetworkManager-dispatcher.service
NetworkManager-wait-online.service
NetworkManager.service

我有一点:

find / -name NetworkManager-dispatcher.service 2>/dev/null

输出如下:

/usr/lib/systemd/system/NetworkManager-dispatcher.service

然而,

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

没有给出任何内容,而:

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

显示:

/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

为什么哦为什么不 find 找到什么东西??? ;-)

在你问之前“那你为什么不使用定位呢?”,答案是:我在 Manjaro 上,locate不是标准的,而find……

答案1

为什么哦为什么没有find发现任何东西???

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

find: paths must precede expression: NetworkManager-wait-online.service

-name只需要一个参数,而您提供了三个。第一个被接受。第二个不被识别为表达式的有效部分,因此find假设它是一条路径(就像/您提供的那样);但“路径必须先于表达式”。

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

另一方面locate可以轻松地采用多个模式。这并不意味着它是完美无缺的。未加引号$()的是经常出错。这里你想要分割输出,但仍然可能会出现其他问题。

相关内容