grep
é a ferramenta errada para isso, em parte porque apenas emite linhas daqueles arquivos que correspondem ao padrão que você dá (e presumivelmente você quer todas as linhas), e em parte porque você não Não dê um padrão, por isso está usando o primeiro nome de arquivo como o padrão (que é não útil).
Listar todos os arquivos *.js
é bastante fácil:
find . -name '*.js'
E concatená-los em um arquivo também é fácil:
find . -name '*.js' | xargs cat
Mas, classificá-los de acordo com a ordem lexical de apenas o nome do arquivo, desconsiderando qualquer diretório em que eles estejam, é mais difícil.
Apenas sort
não fará o trabalho, e não há --key
opção que irá selecionar o último campo quando o número de campos for desconhecido.
O seguinte usa sed para mover o nome do arquivo para o início da linha, classifica isso e, em seguida, retira-o novamente.
find . -name '*.js' | sed 's:^.*/\([^/]*\)$: find . -name '*.js' \
| sed 's:^.*/\([^/]*\)$: find . -name '*.js'
:' | sort | cut -d' ' -f2- \
| xargs cat
:' | sort | cut -d' ' -f2-
Isso não funcionará corretamente se algum dos seus nomes de arquivos ou diretórios tiver espaços.
Você pode extrair o conteúdo adicionando um cat
:
find . -name '*.js' | xargs cat