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.


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


6

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

Tente seu comando com ele:

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

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

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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.