定位命令返回的结果过多

定位命令返回的结果过多

我犯了一个错误,将相同的文件复制到不同的分区,本意是稍后从源或目标中删除它们。现在,当我尝试找到它们时,我从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返回太多结果?

答案1

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$'

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

相关内容