Arquivos de texto com seções em comum com um determinado arquivo

3

Eu preciso manter um conjunto de arquivos de texto simples salvos em um diretório que tenha uma seção extraída de outro arquivo. Segue um exemplo:

Arquivos:

/directory/textfile1 (every other file in the directory needs to "include" the
                      full contents of this file, each file can do so at a
                      different starting position; this file changes often      )
/directory/textfile2 ("includes" textfile1 after a few lines from the top       )
/directory/textfile3 ("includes" textfile1 as a header                          )
/directory/textfile4 ("includes" textfile1 as a footer                          )

Ao alterar o textfile1, eu gostaria que o sistema de arquivos leia o arquivo de texto {2..4} retornar versões atualizadas com o novo conteúdo do textfile1.

Em servidores da Web, isso seria resolvido com o lado do servidor tradicional diretivas. Agora, como eu faria isso sem executar um serviço de front-end?

Posso criar um symlink que, em vez de apontar para outro inode, executa algum código personalizado e apresenta stdout como o conteúdo do arquivo, de alguma forma como definindo "pontos de nova análise" personalizados?

O "symlink" hipotético iria, por exemplo, rodar isto para o arquivo textfile3:

cat /directory/textfile1 /directory/textfile3_static

e, assim, simular a existência de um arquivo estático cujo conteúdo depende do textfile1.

Estou procurando uma solução que use a menor quantidade de personalização, não escrevendo um módulo FUSE personalizado para um ponto de montagem especial ou algo assim.

Eu posso estar pensando na direção errada aqui, talvez seria mais fácil acionar um script de atualização substituindo espaços reservados em todas as modificações do textfile1? Como alguém poderia capturar esse evento sem pesquisar por ele?

Aqui alguns exemplos de arquivos de texto:

Conteúdo:

/directory/textfile1:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
--------------------------------------------------------------------------------

/directory/textfile2:
--------------------------------------------------------------------------------
Juny tu hai un cervellone
quasi tutto sai
Ma quando fai un'invenzione
sono sempre guai
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa
--------------------------------------------------------------------------------

/directory/textfile3:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa

Come sempre insisterai
allora che pasticci tu di nuovo farai
--------------------------------------------------------------------------------

... etcetera. :)

    
por Robottinosino 28.08.2011 / 19:58

2 respostas

2

Traduzindo de alguma forma a resposta do @polynomial para bash :

#!/bin/bash

if [[ ! -e textfile2 ]]; then
  mkfifo textfile2
fi

while true; do
  (
    exec >textfile2
    cat textfile2-header
    cat textfile1
    cat textfile2-footer
  )
done
    
por 28.08.2011 / 22:13
1

Você poderia fazer isso com pipes nomeados. Basicamente você manteria seus arquivos de texto em algum lugar como 'templates' e um script como este exemplo de perl:

link

Abriria 'textfile3' como um pipe e quando recebesse uma solicitação de leitura, despejaria o conteúdo que o textfile3 deveria conter (talvez lendo textfile3.template e substituindo o conteúdo conforme necessário). Isso permitiria que você alterasse dinamicamente o conteúdo sem precisar atualizar vários arquivos e com configuração mínima.

    
por 28.08.2011 / 21:54