我正在尝试遍历 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 {} +
有关 find 的更多信息以及大量示例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
如果你有bash
4 或更新版本您可以使用shopt -s globstar
来启用递归 glob(除其他外):
... job/**/*.html
(感谢@evilsoup!)
这个 glob 将解析为.html
内部任何位置的所有文件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