cat arquivos com diretório

6

Existe um comando para mostrar o nome do diretório / arquivo quando os arquivos do gato?

Por exemplo: suponha que dois arquivos f1.txt e f2.txt estejam em ./tmp

./tmp/f1.txt
./tmp/f2.txt 

Então quando eu faço cat ./tmp / *. txt , somente o conteúdo dos arquivos será mostrado. Mas como mostrar primeiro o nome do arquivo e depois o conteúdo ?, por exemplo:

 (The needed command):
 ./tmp/f1.txt:  
 This is from f1.txt
 and so on
 ./tmp/f1.txt:
 This is from f2.txt ...

Existe um comando para fazer isso? (Parece não haver nenhuma opção para 'cat' mostrar os nomes dos arquivos)

    
por Gilles 28.08.2012 / 17:43

7 respostas

3
$ for file in ./tmp/*.txt; do echo "$file";  cat "$file"; done

-ou -

$ find ./tmp -maxdepth 1 -name "*.txt" -print -exec cat {} \;
    
por 28.08.2012 / 17:52
9

Assim como outra ideia, tente tail -n +1 ./tmp/*.txt

==> file1.txt <==
<contents of file1.txt>

==> file2.txt <==
<contents of file2.txt>

==> file3.txt <==
<contents of file3.txt>
    
por 28.08.2012 / 18:26
2

Você poderia facilmente escrever um pequeno script fazendo exatamente isso,

for f in "$@" do; echo "This is from $f"; cat -- "$f"; done
    
por 28.08.2012 / 17:46
1
find . -name '*' -execdir cat '{}' \;

Quando um diretório é passado para cat , você verá algo como:

cat: ./chapter_01: Is a directory

Imediatamente após, o find irá cat do conteúdo desse diretório.

    
por 28.08.2012 / 17:54
1

Não é exatamente o que você pediu, mas você pode prefixar cada linha com o nome do arquivo:

$ grep ^ ./tmp/*.txt
./tmp/f1.txt: this is from f1.txt
./tmp/f1.txt: blaa, blaa, blaa...
./tmp/f1.txt: blaa, blaa, blaa...
./tmp/f2.txt: this is from f2.txt
./tmp/f2.txt: blaa, blaa, blaa...
./tmp/f2.txt: blaa, blaa, blaa...

Será difícil fazer muito melhor que isso sem recorrer a um pequeno script.

    
por 28.08.2012 / 17:54
1

cat é (intencionalmente) um comando extremamente simples que apenas lê um fluxo de arquivo e o copia para outro (com algumas opções básicas de formatação). Seria bastante fácil criar um utilitário baseado no cat que forneceu o nome do arquivo, mas as versões padrão não farão isso - provavelmente porque é fácil replicar com outros comandos.

Se você quiser examinar as páginas manualmente, pode usar 'menos'. Isto lhe dará o nome do arquivo no final de cada arquivo, no formato: 'foo.txt (arquivo 1 de 100) (END) - Próximo: bar.txt).

    
por 28.08.2012 / 18:00
0
grep . *.txt 

Corresponde a todas as linhas e também mostra nomes de arquivos

    
por 06.08.2015 / 19:01

Tags