文字列を含まないすべてのファイルの場合は、ファイルの前に文字列を追加します。

文字列を含まないすべてのファイルの場合は、ファイルの前に文字列を追加します。

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

だから2つあります。

  • このコマンドをすべての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/(2番目のスラッシュで誤解しないでください。実際にglobがあるようです**/)。

到着ファイルの先頭にテキストを追加する準安全:

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

より安全な解決策は、任意の一時ディレクトリを使用して、このディレクトリを妨げる他のほとんどすべてのプロセスを防ぐことです。

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

関連情報