定位命令返回的结果太多

我错误地将相同的文件复制到不同的分区,以便稍后从源或目标中修剪(删除)它们。 现在,当我尝试找到它们时,我从locate命令获得了太多结果:

 rick@alien:~$ locate "display-auto-brightness" /etc/cron.d/display-auto-brightness /home/rick/Pictures/display-auto-brightness conky.png /home/rick/Pictures/display-auto-brightness systray.png /home/rick/Pictures/display-auto-brightness-config 1.png /home/rick/Pictures/ps display-auto-brightness.png /lib/systemd/system-sleep/display-auto-brightness /mnt/e/etc/cron.d/display-auto-brightness /mnt/e/lib/systemd/system-sleep/display-auto-brightness /mnt/e/usr/local/bin/display-auto-brightness /usr/local/bin/display-auto-brightness 

locate命令会自动将*通配符放在搜索字符串后面,并返回额外的不需要的结果。 不应返回.png文件。

为什么locate返回太多结果?

locate命令会自动将*通配符放在搜索字符串后面,并返回额外的不需要的结果。

这是locate的默认行为。 见man locate

 If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN*. 

要仅匹配文件名,请在路径组件中显式设置glob:

 locate '*/display-auto-brightness' 

或者使用正则表达式和--basename选项来匹配确切的文件名:

 locate --basename --regex '^display-auto-brightness$' 

或者,根据您显示的结果,您可以在最后询问包含display-auto-brightness路径:

 locate --regex 'display-auto-brightness$' 

我将让你在循环遍历目录中每个文件名的脚本中使用它。