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.