Gilles está exatamente certo , ls
é um péssimo exemplo porque a expansão glob do nome do arquivo pode ser feita muito mais facilmente na linha de comando sem ter que usar ls
! Se seus chamados "arquivos de texto" tiverem extensões de nome de arquivo para identificá-los, você poderá fazer algo assim:
editor-command *.txt
Para demonstrar uma técnica, vamos usar um exemplo mais complicado que não poderia ser feito apenas com uma correspondência de nome de arquivo e arquivos abertos com base no conteúdo, em vez de apenas no nome do arquivo. Vamos dizer que você queria abrir todos os arquivos que continham a string "content-type".
Assumindo que o seu editor aceitará vários nomes de arquivos e os abrirá de uma só vez em buffers separados ou funcionará sequencialmente através deles, você pode simplesmente executar:
editor-command $(grep -i content-type)
Agora, voltando à sua pergunta original, digamos que você não saiba se são arquivos de texto ou não baseados em seus nomes. Você precisaria usar outro programa para identificá-los e abri-los com base nesses dados. O programa file
dirá a você que tipo de arquivo é algo, e você pode usar essa lista apenas para arquivos de texto e, em seguida, abrir apenas os nomes de arquivos correspondentes como este:
editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)
A saída da cadeia de comandos dentro da construção $()
será usada como argumentos para o editor. Eu às vezes faço isso em dois estágios. Digamos que eu esteja procurando em alguns arquivos e obtenha uma lista de todos os arquivos xml contendo a string "content-type"
find -type f -iname '*xml' | xargs grep -Hi 'content-type' | cut -d: -f1
... e decido que eu quero abri-los. Eu então uso o último atalho do histórico de comandos e faço isso:
vim $(!!)
... para abrir todos os resultados do comando anterior no vim, meu editor favorito.
Se o seu editor aceitar apenas um arquivo por vez e você precisar continuar gerando editores, será necessário usar uma variante do loop xargs
ou for
em resposta do jmtd dependendo se você está usando um editor baseado em terminal que precisa de stdio.