Encontre arquivos com formato de nome de arquivo específico, cole cada um com um arquivo de cabeçalho e salve o resultado no arquivo original de cada um desses arquivos [duplicado]

2

Eu tenho um monte de arquivos html e quero cat-los todos (individualmente) com um arquivo de cabeçalho (várias linhas pelo menos em comprimento), digamos header.txt. Eu estou quase lá. Eu posso catar cada arquivo com o arquivo de cabeçalho com o seguinte comando, mas como posso então enviar o resultado para salvá-lo sob o nome do arquivo original?

find . -iname "*.html" | xargs -L 1 cat header.txt 

O texto acima mostra o que eu quero, mas como posso referenciar o argumento xargs para adicionar um > nome original do arquivo?

Então, em suma, quero inserir o texto do header.txt no início de cada arquivo html. Posso modificar o comando acima para fazer isso? Ou, alternadamente, existem outras maneiras de conseguir isso?

Como atualização, eis o que tentei desde postar, o que não funcionou:

find . -iname "*.html" | xargs -L 1 cat header.txt {} > {}.new

Isso funciona bem, exceto que ele imprime em um arquivo literalmente denominado {}.new . Esse arquivo parece como deveria, mas isso não é útil.

Também tentei a sugestão do @ Dave, mas há um erro de sintaxe que não consigo corrigir:

 find . -iname "*.html" -exec (cat header.txt; cat {}) > {}.new
-bash: syntax error near unexpected token '('
    
por sunny 28.10.2015 / 19:11

2 respostas

1

I want to insert the text from header.txt into the beginning of every html file.

Para preceder o conteúdo de header.txt para todos os arquivos HTML, use este oneliner:

for i in 'find . -name '*.html'' ; do cat /path/to/header.txt > "$i".tmp && cat "$i" >> "$i".tmp && mv "$i".tmp "$i" ; done

Conteúdo de 1.html :

first html file contents

Conteúdo de header.txt :

my header

Conteúdo de 1.html após a execução do script:

my header
first html file contents

(Eu testei, mas faça backup de seus arquivos apenas no caso.)

    
por 28.10.2015 / 19:53
0

Você pode usar um loop while, como o seguinte:

find . -iname "*.html" | while read line; do cat header.txt "$line" > "${line}.new" ; done
    
por 28.10.2015 / 19:53

Tags