![定位命令返回的结果过多](https://linux22.com/image/1153972/%E5%AE%9A%E4%BD%8D%E5%91%BD%E4%BB%A4%E8%BF%94%E5%9B%9E%E7%9A%84%E7%BB%93%E6%9E%9C%E8%BF%87%E5%A4%9A.png)
我犯了一个错误,将相同的文件复制到不同的分区,本意是稍后从源或目标中删除它们。现在,当我尝试找到它们时,我从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$'
我会让你在脚本中使用它来循环遍历目录中的每个文件名。