Попробуйте следующее:
lf='output.log'
> "$lf" # first truncate/create the logfile.
run_wrapper.sh >> "$lf" 2> >(grep -v "Warn.*passw.*insec" >> "$lf")
Перенаправляет stderr через подстановку процесса на grep -v ...
, и к выходным данным добавляется >>
- output.log
Вероятно, вы захотите использовать параметр - line-buffered
(GNU) grep
, а также параметр -v
, чтобы убедиться, что вывод ошибки не задерживается.
Если постобработка файла журнала является приемлемым вариантом для вас, вы можете просто удалить ненужные строки «Предупреждение:» из файла журнала после завершения run_wrapper.sh
.
Следующий фрагмент сценария оболочки сохраняет метку времени (в $ ts
) файла журнала (в $ lf
) перед запуском sed -i
и восстанавливает это потом:
lf='output.log'
run_wrapper.sh >& "$lf"
ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
sed -i -e '/Warning: Using a password/d' "$lf"
touch -t "$ts" "$lf"
Если вам нужно сохранить индексный дескриптор файла журнала (например, потому что в нем есть жесткие ссылки), используйте ed
вместо sed
:
ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
printf "%s\n" 'g/Warning: Using a password/d' w | ed -s "$lf"
touch -t "$ts" "$lf"
Если вы создаете резервную копию каталога, описанного ниже, имейте в виду
1. all directory and subdirectory have read and write privileges
2. If any file that file have read privileges
Теперь, если резервное копирование произведено любым привилегированным пользователем, используйте sudo. Перед использованием sudo проверьте пользователя в файле / etc / sudoers, есть ли у пользователя доступ к sudo или нет. Если нет, то попробуйте от имени пользователя root.
В общем, вам следует выполнять резервное копирование как любой пользователь, необходимый для доступа ко всем файлам, для которых выполняется резервное копирование. В случае / etc
это означает root
(таким образом, используется sudo
, или root
заданий cron или таймер systemd).