Como abrir um arquivo encontrado com o vi? Piping 'find' output para vi [duplicate]

6

Eu tenho um arquivo, /home/user/important.txt . Para encontrá-lo, eu uso:

find /home/user -type f -name 'important'

Depois, quero abrir o arquivo no editor Vim usando um canal.

Como posso fazer isso?

Algo como

find /home/user -type f -name 'important' | vi
    
por micgeronimo 16.02.2015 / 10:21

6 respostas

5

Adicione * curinga após "importante", e você também pode usar o seguinte comando:

vim $(find /home/user -name "important*")
    
por Panta 16.02.2015 / 11:08
8

Você pode usar -exec junto com find . Use o seguinte comando:

find /home/user -type f -name 'important' -exec vi {} \;
    
por Naks 16.02.2015 / 10:43
5

Uso:

find ./ -name 'important.txt' -print0 | xargs -0 vi

Isso funciona e é simples.

Se você não precisa de um cano, tente isso:

find ./ -name 'important.txt' -exec vi {} \;
    
por Red Aura 16.02.2015 / 11:06
1

locate é simples assim:

locate -0 important.txt | xargs -0 vi

    
por kamil 16.02.2015 / 14:41
1

Você pode usar a primeira opção:

find ./ -name 'important' -print0 | xargs -0 vi


ou como segunda escolha:

find /home/user -type f -name 'important' -exec vi {} \;


Observe que o comando xargs pode manipular corretamente os espaços dentro dos nomes de arquivos encontrados pelo comando find sem que você precise se preocupar com resultados inesperados.
e evite a substituição de comandos como segue:

vim $(find /home/user -name "important*")

Isso ocorre porque, na maioria dos casos, você simplesmente não sabe quantos resultados (arquivos) você está esperando ou se esses nomes de arquivos têm espaços neles para evitar resultados indesejados devido a espaços.

    
por analytics enthusiast 16.02.2015 / 16:11
1

Se você deseja obter a saída do comando find (ou seja, a lista de arquivos) no vim, o seguinte terá o vim lido na saída do find:

find /home/user -type f -name 'important' | vi -

Se você deseja abrir os próprios arquivos, então as ações xargs e find -exec são boas opções, como mencionado por outras respostas.

No entanto, para a ação -exec, é melhor usar a seguinte sintaxe:

find /home/user -type f -name 'important' -exec vi {} +

A distinção entre "\;" e "+" no final do comando é o seguinte:

com "\;" uma instância do vim será aberta para cada arquivo encontrado. Isso significa que se 20 arquivos forem encontrados, você terá que fechar o vim 20 vezes para voltar ao shell e não poderá se mover entre os arquivos dentro do vim.

Com "+", uma única instância do vim será aberta com todos os arquivos encontrados. Isso significa que você pode alternar entre os arquivos como buffers e, quando estiver pronto, há apenas uma instância do vim a ser fechada.

    
por Pooping 16.02.2015 / 18:45