我想搜索任意文件/目录名,但只想列出包含搜索字符串的文件路径一次。特别是不是目录中的每个文件都匹配搜索字符串。
下面是一个例子,locate -i flatpak列表:
/etc/flatpak
/etc/dbus-1/system.d/org.freedesktop.Flatpak.SystemHelper.conf
/etc/flatpak/remotes.d
/etc/profile.d/flatpak.sh
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/74
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/75
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/76
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/77
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/78
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/79
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7a
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7b
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7c
/home/simon/.cache/gnome-software/flatpak/installation-tmp/repo/objects/7d
/var/lib/flatpak
/var/lib/flatpak/.changed
/var/lib/flatpak/.removed
/var/lib/flatpak/app
/var/lib/flatpak/appstream
/var/lib/flatpak/exports
/var/lib/flatpak/repo
/var/lib/flatpak/runtime但我想要这样的搜索结果:
/etc/flatpak
/etc/dbus-1/system.d/org.freedesktop.Flatpak.SystemHelper.conf
/etc/profile.d/flatpak.sh
/home/simon/.cache/gnome-software/flatpak
/var/lib/flatpak哪种工具最适合这个?locate,find,fd-find?
发布于 2019-11-29 09:56:27
听起来您只想在文件名(而不是在其他路径组件中)中搜索flatpak,因此可以使用-b/--basename选项:
所以:
locate -ib flatpak另一种方法可以是使用-r/--regex选项并编写:
locate -ir 'flapak[^/]*即flatpak,后面跟着除/之外的任意数量的字符,然后是文件路径的末尾。不过,这可能会遗漏在flatpak之后具有非字符(在当前区域设置中)的文件名。即flatpak,后面跟着除/之外的任意数量的字符,然后是文件路径的末尾。
不过,这可能会遗漏在flatpak之后具有非字符(在当前区域设置中)的文件名。
发布于 2019-11-29 09:15:30
您可以使用sed删除模式flatpak之后的所有内容,然后对输出进行排序,只打印唯一的行:
locate -i flatpak | sed -E -e 's/(flatpak\/?).*/\1/i' -e 's/\/$//' | sort | uniq发布于 2019-11-29 10:26:58
要使用find查看整个文件系统中包含字符串flatpack的文件名,请执行以下操作:
find / -name '*flatpack*'如果您的find实现有-iname,那么您可以使用它代替-name来不敏感地搜索案例。如果您只想搜索常规文件,那么也要使用-type f (您的示例涉及到查找任何类型的文件,因此您可能应该忽略这一点):
find / -type f -iname '*flatpack*'当find试图进入您无法访问的目录时,这可能会给您提供一些“拒绝权限”错误。为了避免这种情况,您可能会使用GNU find,如下所示:
find / ! -readable -prune -o -iname '*flatpack*' -print这比使用locate -ib flatpack要慢,但是总是会给出最新的结果。locate正在使用的数据是每天或每周收集的,不包括所有用户都无法读取的路径。
https://unix.stackexchange.com/questions/554750
复制相似问题