Abrir arquivo encontrado com o comando 'find'

12

Provavelmente é fácil, mas não consigo entender e praticamente não é pesquisável. Em uma hierarquia de pastas, tenho exatamente um arquivo do tipo xyz. Eu quero encontrar esse arquivo e abri-lo com um comando terminal.

find . -name *.xyz

Isso retornará o arquivo que estou procurando. Agora, como abro-o automaticamente, sem digitar o nome?

find . -name *xyz | open

Isso não funciona. Ele diz que não encontrou o comando aberto.


fonte
3
Que tipo de arquivo é esse? Se não for um arquivo executável, com qual programa você deseja abrir o arquivo? Ah, o que o Windows fez com a nossa população = /
chown
Isso provavelmente pertence ao superusuário ...
retracile
11
Estou em um Mac e não no Windows ... e quero abrir o arquivo com o programa padrão.
2
encontrar . -name * xyz | xargs abre e encontra. -name * .xyz -exec open {} \; ambos funcionaram. Obrigado.
Estou feliz que você encontrou uma solução. Não se esqueça de marcar a solução que melhor funcionou para você. Outros verão a sua taxa de 'aceitação' e isso ajuda bastante ao fazer perguntas futuras. Usuários com uma taxa de aceitação mais baixa costumam achar suas perguntas ignoradas. =)
matchew 14/10

Respostas:

10

@retracile está correto. Você precisa abri-lo com 'alguma coisa'. No entanto, eu prefiro usar exec sobre xargs.

find . -name '*.xyz' -exec cat {} \;

isso retornará cat fileFound.xyz; cat fileFound2.xyx;etc. No entanto, você espera encontrar apenas um arquivo.

observe que a mudança \;para +retornará, cat fileFound.xyz fileFound2.xyzdependendo do caso, a posterior talvez a escolha preferida.

para saber mais sobre isso, diria a você esta pergunta

matchew
fonte
6

O comando que você está procurando é chamado xdg-open

Tente seu comando com ele:

xdg-open "$(find . -name '*xyz' | head -n1)"
static_rtti
fonte
6

Você precisa saber qual o programa que deseja usar para abrir o arquivo. Se for uma imagem, você pode usar gwenview ou algo assim.

Receber e transformá-lo em argumentos é feito com xargs. E você vai querer escapar desse curinga ...

find . -name \*xyz | xargs gwenview

E para lidar com espaços em nomes de arquivos ....

find . -name \*xyz | xargs -d"\n" gwenview
retrátil
fonte
2

Como outros já apontaram, sua pergunta não é suficientemente específica para responder com clareza. Portanto, adivinhando outro significado possível: Se você quer executá-lo como executável, (o que significa que seu programa é executável), diga ao shell que deseja substituir a saída do comando find como parte da linha de comando :

$(find . -name *.xyz)
mkj
fonte
0

Se você quiser abrir todos os arquivos encontrados findem guias separadas em uma única instância do vim, faça o seguinte:

find . -name \*xyz | xargs vim -p
Cory Klein
fonte