Com base nesta resposta , desejo realizar uma operação em todos os arquivos de um diretório e seus subdiretórios.
O comando a seguir funciona em um único arquivo e também funciona quando usado em vários arquivos em um loop.
for i in *.html; \
do sed -i '/<head>/a <link rel="stylesheet" href="/home/jian/postgres/doc/src/sgml/html/stylesheet.css">\' $i; \
done
Mas o comando a seguir não funcionará.
find . -type d -exec \
for i in *.html; \
do sed -i '/<head>/a <link rel="stylesheet" href="/home/jian/postgres/doc/src/sgml/html/stylesheet.css">\' $i; \
done \
\;
Dá o seguinte erro:
bash: syntax error near unexpected token `do'
bash: syntax error near unexpected token `done'
;: command not found
Encontrei um post relacionado aqui .
Chamando
sed
defind
todos os arquivos regulares com nomes correspondentes*.html
no diretório atual ou abaixo:Supondo que você insira corretamente sua
sed
expressão no código acima, isso chamarásed
com lotes os nomes de caminho dos arquivos encontrados, garantindo quesed
seja invocado o menor número de vezes possível.Alternativamente,
Isso habilita o
**
padrão que funciona como,*
mas combina/
em nomes de caminho ("recursivamente"). Ele também permite que os padrões correspondam a nomes ocultos (comofind
também faria) e informa ao shell para falhar com um erro se nenhum nome corresponder a um padrão.A diferença aqui é que