Cat todos os arquivos em uma pasta, incluindo o nome do arquivo usando um loop for?

1

Com esse loop que executo diretamente no shell, posso catar o conteúdo de todos os arquivos em uma pasta, com o valor ao lado dele:

$ for f in *; do echo -e "\t"$f"\n"; cat $f; done

Exemplo de saída:

100 
    testfile1
    testfile3      <-No output because this file is empty
hello 
    testfile2

Mas eu gostaria de imprimir o valor no lado direito e o arquivo no canto superior esquerdo assim:

testfile1 
    100
testfile3
testfile2
    hello

Eu tentei trocar a posição de echo e cat mas isso não funciona, funciona exatamente como o outro comando.

$ for f in *; cat $f; do echo -e "\t"$f"\n"; done

Como posso conseguir isso?

    
por Black 19.01.2016 / 14:05

2 respostas

5

for f in *; do
  printf '%s\n' "$f"
  paste /dev/null - < "$f"
done

Imprimiria o nome do arquivo seguido de seu conteúdo com cada linha precedida por um caractere TAB para cada arquivo no diretório.

Mesmo com o GNU awk :

awk 'BEGINFILE{print FILENAME};{print "\t" $0}' ./*

Ou para evitar a impressão do nome de arquivos vazios:

awk 'FNR==1 {print FILENAME}; {print "\t" $0}' ./*

Ou com o GNU sed :

sed -s '1F;s/^/\t/' ./*
    
por 19.01.2016 / 14:08
-1

Eu encontrei uma solução possível:

for f in *; do echo -e $f"\n\t$(cat $f)"; done
    
por 19.01.2016 / 14:35