Eu quero procurar por nomes de arquivos/diretórios arbitrários, mas só quero listar os caminhos de arquivos que contêm a string de pesquisa na mesma posição uma vez. Especialmente nem todos os arquivos dentro de um diretório que correspondam à string de pesquisa.
Aqui está um exemplo, locate -i flatpak
listas:
/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
Mas eu quero um resultado de pesquisa como este:
/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
E qual ferramenta é mais adequada para isso? locate
, find
, fd-find
?
Você pode usar
sed
para remover tudo após o padrãoflatpak
, então você pode classificar a saída e imprimir apenas linhas exclusivas:Parece que você deseja pesquisar
flatpak
apenas no nome do arquivo (e não em outros componentes do caminho), então você pode usar a opção-b
/--basename
:Então:
Outra abordagem poderia ser usar a opção
-r
/--regex
e escrever:Isso é
flatpak
seguido por qualquer número de caracteres que não seja/
seguido pelo final do caminho do arquivo.No entanto, isso pode perder nomes de arquivos que não tenham caracteres (na localidade atual) após
flatpak
.Para usar
find
para procurar em todo o sistema de arquivos por nomes de arquivos que contenham a stringflatpack
em seus nomes:Se sua
find
implementação tiver-iname
, você poderá usar isso no lugar de-name
pesquisar maiúsculas e minúsculas. Se você deseja pesquisar apenas arquivos regulares, use também-type f
(seu exemplo envolve encontrar qualquer tipo de arquivo, então você provavelmente deve deixar isso de fora):Isso provavelmente daria a você vários erros de "permissão negada" ao
find
tentar descer em diretórios aos quais você não tem acesso. Para evitar isso, você poderia usar o GNUfind
assim:Isso seria mais lento do que usar
locate -ib flatpack
, mas sempre forneceria resultados atualizados. Os dadoslocate
em uso são coletados diariamente ou semanalmente e não incluirão caminhos que não sejam legíveis por todos os usuários.