Edit: melhor solução que produz os nomes dos arquivos de saída desejados
Fazendo uso de ls , awk e cat :
ls | awk '! /\([0-9]+\)/ {match($0, /Txt_BI_ProfilesBI_Profile_Export_([^.]+)/,matches); system("cat " $0 "* >"matches[1] ".txt")}'
Solicitado pela exibição de Matthew sobre os poderes de Powershell, eu tinha para mostrar que o mesmo pode ser alcançado em um ambiente festivo. Essa é apenas uma das muitas maneiras, como é comum no mundo do UNIX.
Explicação:
ls lista todos os elementos no diretório atual
awk linguagem de programação projetada para processamento de texto
! /\([0-9]+\)/ exclui nomes de arquivos que contêm um número entre parênteses
match($0, /Txt_BI_ProfilesBI_Profile_Export_([^.]+)/,matches) executa uma correspondência de expressão regular no nome do arquivo, capturando a parte entre o prefixo comum e o primeiro ponto
system(" executa um comando do sistema
cat " $0 "* concatenam arquivos que começam com o nome de arquivo
>"matches[1] ".txt" output para um arquivo chamado como a expressão capturada e com uma extensão .txt
Primeira resposta:
Você pode usar find , xargs , bash e cat :
find . -type f -regextype sed ! -regex "\./.*([0-9]\+)" | xargs -I{} bash -c 'cat {}* > {}.txt'
Esta é mais uma prova de conceito e pode ser refinada, já que os nomes dos arquivos de saída não são exatamente o que você procurava, mas devem ser suficientes para resolver seu problema imediatamente.
Explicação:
find . pesquisa o diretório atual
-type f procura por arquivos
-regextype sed usa o mecanismo de expressões regulares com sintaxe compatível com sed
! -regex "\./.*([0-9]\+)" exclui resultados que correspondem à expressão regular especificada, ou seja, aqueles que incluem um número entre parênteses no final
| xargs usa cada resultado para construir um comando
-I{} no comando a seguir, substitua {} por cada find result
bash -c passa a seguinte string como um comando para bash
'cat {}* > {}.txt' concatena os arquivos que começam com o nome do arquivo encontrado em um arquivo que possui um nome composto pelo resultado find e a extensão .txt