문자열을 포함하지 않는 모든 파일의 경우 파일 앞에 문자열을 추가합니다.

문자열을 포함하지 않는 모든 파일의 경우 파일 앞에 문자열을 추가합니다.

HTML 파일 목록을 반복하면서 {% load static from staticfiles %}파일이 존재하는지 확인하고존재하지 않는 경우, {% load static from staticfiles %}앞에 추가되었습니다.

지금 1개 파일에서 호출하는 내용은 다음과 같습니다 job/home.html(모든 파일에 적용하기 전 테스트용).

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

그래서 두 가지가 있습니다.

  • 이 명령을 모든 HTML 파일에 대해 재귀적으로 만드는 방법
  • 줄 바꿈, \n줄 바꿈이 아닌 것 같습니다.

답변1

다음을 시도해 보세요. 재귀적인 결과가 반환되어야 합니다.

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

찾기에 대한 추가 정보 및 다양한 예제http://en.wikipedia.org/wiki/찾기그리고 뭔가 다른 것https://unix.stackexchange.com/questions/tagged/find

답변2

이 시도:

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"
' -- {} \;

답변3

당신이 가지고 있다면bash4 이상shopt -s globstar다음을 사용하여 재귀 glob을 활성화 할 수 있습니다 .

... job/**/*.html

(@evilsoup에게 감사드립니다!)

.html이 glob은 내부의 모든 파일을 확인합니다 job/(두 번째 슬래시로 오해하지 마세요. 실제로 glob이 인 것처럼 보입니다 **/).

도착하다파일 시작 부분에 텍스트 추가준안전:

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

더 안전한 해결책은 임의의 임시 디렉토리를 사용하여 이 디렉토리를 방해하는 거의 모든 다른 프로세스를 방지하는 것입니다.

dir="$(mktemp -d)" && echo "text" | cat - yourfile > "$dir/out" && mv "$dir/out" yourfile

관련 정보