Argumentos de tubulação no comando “open”

0

Estou tentando abrir uma lista grande de arquivos .xml usando o seguinte comando:

ls | grep navigation-drawer-config- | open

No entanto, isso não funciona. Do meu entendimento da tubulação, isso deve canalizar o que o grep encontra no diretório correspondente a esse padrão de nome para aberto, e abrir deve abrir os arquivos. Eu posso abri-los manualmente fazendo algo assim:

open file1 file2

No entanto, quando eu uso o primeiro comando, eu volto a tela de ajuda para o comando open. Você não é capaz de combinar o grep com o open? Ou estou faltando alguma outra coisa?

    
por user34547 12.01.2016 / 17:25

2 respostas

1

O problema é que você não está adicionando os nomes de arquivos ao comando open, mas sim a saída do grep no comando open.

Existem algumas maneiras de fazer isso, incluindo

open navigation-drawer-config-*

O que usará a expansão do GLOB e é provavelmente a abordagem mais rápida e simples.

Ou

open 'ls | grep "navigation-drawer-config-"'

Que executa ls e grep e depois coloca a saída como os parâmetros para o comando open.

Ou

find . -name "navigation-drawer-config-*" -exec open {} +

O qual irá procurar no diretório corrente E TODOS OS SUBDIRECTORIAS por um arquivo que comece com o método de navegação-drawer-config- e "abrir" os mesmos.

    
por 12.01.2016 / 20:38
0

Se você estiver no UNIX ou na maioria dos sistemas operacionais Unix-like (Linux, BSD, mac os), você pode usar xargs , que é usado para criar argumentos de pipe para uma linha que não usa pipe | ; então, para o seu exemplo

ls | grep navigation-drawer-config- | xargs open

Para informações, o primeiro argumento de xargs é (no exemplo) open para o qual fornecerá o resultado de grep de sua entrada padrão como argumentos de linha de comando e tornará uma navegação aberta "exec" -drawer-config ".

    
por 18.04.2018 / 00:12