Как я могу добавить и добавить некоторый текст ко всем файлам в папке в Linux
У меня есть структура папок, как показано ниже
resources/folder1 , /folder2 , /folder3
Теперь я хочу, чтобы этот текст был дополнен символами новой строки:
{% extends '::layout.html.twig' %}
{% block body %}
и это должно быть добавлено внизу
{% endblock %}
всех файлов в папке и подкаталогах в разделе Ресурсы. Это возможно?
4 ответа
Изменить каталог на resources
создайте два файла шаблона: BEGIN
а также END
,
Файл: НАЧАТЬ
{% extends '::layout.html.twig' %}
{% block body %}
Файл: END
{% endblock %}
Запустите команды:
sed -i '1s/^/\n/' */*
sed -i -e '1rBEGIN' -e '$rEND' */*
sed -i '1d' */*
Никакой обратной косой черты не избежать, это решение очень простое и понятное и хорошо масштабируется.
Вы можете сделать это с sed
:
sed -i -e "
1s/^/\n{% extends '::layout.html.twig' %}\n{% block body %}\n/ ;
$s/$/\n{% endblock %}/
" $(ls -R resources/folder* )
Есть, вероятно, множество способов сделать это. При условии, что имена файлов не содержат пробелов и т.п., вы можете использовать:
find resources -type f -print |
while read file
do
{
echo "{% extends '::layout.html.twig' %}"
echo "{% block body %}"
cat $file
echo "{% endblock %}"
} > tmp.$$
cp tmp.$$ $file
rm -f tmp.$$
done
Набор фигурных скобок выполняет перенаправление ввода / вывода для вложенных команд. Их немного сложно использовать точно в одной строке с командами, но приведенный выше код прост. Перенаправление на tmp.$$
В порядке, если вы не работаете в агрессивной среде; вам может понадобиться mktemp
или какая-то другая команда, если вы думаете, что люди могут подорвать вас, пока вы запускаете скрипт. cp
а также rm
Выполнение, как показано, означает, что вы не столкнетесь с проблемами, если какой-либо из файлов фактически является символической ссылкой (или жесткой ссылкой); ссылки сохранены. Альтернативы, такие как mv tmp.$$ $file
сломал бы ссылки или символические ссылки.
Самый простой способ будет в два этапа ИМО:
egrep -r -l "{% extends '::layout.html.twig' %}" resources/ |xargs sed -i 's/ \{\%\ extends\ \'\:\:layout\.html\.twig\'\ \%\} /\n \{\%\ extends\ \'\:\:layout\.html\.twig\'\ \%\}/g'
а потом:
egrep -r -l "{% extends '::layout.html.twig' %}" resources/ |xargs sed '$ a\\n'