Para todos os arquivos que não contêm uma string, adicione uma string ao arquivo

0

Estou tentando fazer uma iteração em uma lista de arquivos html, verifique se {% load static from staticfiles %} existe no arquivo e se ele não existe , prefixar {% load static from staticfiles %} a ele.

Isto é o que eu tenho agora em um arquivo chamado job/home.html (para fins de teste antes de aplicá-lo a todos os arquivos):

grep -q '{% load static from staticfiles %}' job/home.html || sed -i '' 's+{% load static from staticfiles %}\n+' job/home.html

Então, 2 coisas,

  • Como posso tornar este comando recursivo para todos os arquivos html
  • A quebra de linha, \n não parece ser quebra de linha
por super9 25.02.2013 / 12:29

3 respostas

1

Tente o seguinte, que deve retornar um resultado recursivo

find /home/user/myfolder -name '*.html' -exec sh -c '
  for file do
    yourcommands with "$file"
  done' sh {} +

Mais sobre a localização e muitos exemplos no link e também algumas coisas diferentes em link

    
por 25.02.2013 / 12:41
0

Tente fazer isso:

find /home/user/myfolder -name '*.html' -exec sh -c '
    fgrep &>/dev/null "{% load static from staticfiles %}" "$1" ||
        sed -i '1i {% load static from staticfiles %}!' "$1"
' -- {} \;
    
por 25.02.2013 / 14:10
0

Se você tiver bash 4 ou mais recente , você pode usar shopt -s globstar para ativar globs recursivas (entre outras coisas):

... job/**/*.html

(obrigado @evilsoup!)

Este glob resolverá todos os arquivos .html em qualquer lugar dentro de job/ (não seja induzido em erro pela segunda barra; parece que o glob é na verdade **/ ).

Para adicionar texto ao início de um arquivo com segurança:

echo "text" | cat - yourfile > /tmp/out && mv /tmp/out yourfile

Uma solução mais segura seria usar um diretório temporário aleatório, para evitar que quase todos os outros processos interfiram com este:

dir="$(mktemp -d)" && echo "text" | cat - yourfile > "$dir/out" && mv "$dir/out" yourfile
    
por 25.02.2013 / 17:21

Tags