Abre o arquivo diretamente após o grep

0

Estou recebendo um problema no piping no linux,

ls | grep feedback

Eu tenho um alias para o xdg-open que está aberto, como fazer para que o nome do arquivo do grep seja diretamente aberto

isso não está funcionando

ls | grep feedback | open
    
por Noor 04.01.2013 / 19:11

1 resposta

5

xargs constrói e executa linhas de comando a partir da entrada padrão .

A sintaxe é simples:

ls | grep feeback | xargs open

Isso não funcionará se o nome do arquivo contiver um espaço. Por exemplo, para um arquivo chamado foo bar :

ls | grep foo | xargs open

O texto acima tentaria abrir um arquivo chamado foo e, em seguida, um arquivo chamado bar , já que o espaço normalmente separa os argumentos.

Nesse caso, você pode usar aspas para delimitar o nome do arquivo:

ls | grep foo | xargs -I '{}' open '{}'

No entanto, esta abordagem pode falhar se o nome do arquivo contiver espaços.

Outra opção seria usar localizar , o que evita canos completamente:

find -maxdepth 1 -name '*foo*' -exec open '{}' \;

Aqui, -maxdepth 1 faz encontrar somente a pesquisa no diretório atual (ou seja, sem incluir subdiretórios), -name '*foo*' procura por arquivos que contenham a string foo em seu nome e -exec open {} \; , substituindo {} com o nome do arquivo encontrado. find irá lidar automaticamente com caracteres especiais.

Por meio da substituição de comandos , um resultado semelhante pode ser alcançado:

open "$(ls | grep feedback)"

Isso funcionará, mesmo que o arquivo contenha espaços.

    
por 04.01.2013 / 19:15

Tags