Я запускаю скрипт, который перемещает файлы от моего жесткого диска до Google Drive with Rclone, который похож на это:
#!/bin/bash
exec 1>> /home/user/MoveLog.txt
exec 2>&1
rclone move localfolder remotefolder:
Хорошо. Таким образом, rclone показывает большое терминальное действие, в то время как это работает, делая журнал довольно большим.
То, что я хочу сделать, отфильтровать этот вывод в созданном журнале.
Я хотел иметь журнал, который похож на вывод:
cat MoveLog.txt | grep Copied
Так как эта команда возвращает только более важные части журнала.
Как я могу реализовать это на первом сценарии, заставив это зарегистрировать только строки, которым "скопировали" текст в них?Спасибо.
Кажется, что Вы хотите отфильтровать продукцию обоих, stdout и stderr и приложить его к файлу системного журнала:
rclone move localfolder remotefolder &> /dev/stdout | grep Copied >> /home/user/MoveLog.txt
должен сделать то, что Вы хотите. Я думаю двоеточие, которое Вы используете в Вашем rclone
- команда не принадлежит там, таким образом, я пропустил его, но я мог бы быть неправым в этом пункте.
Это кажется чрезмерно сложным, как насчет
#!/bin/bash
rclone move localfolder remotefolder: |& \
tee -a "$HOME/MoveLogEntire.txt" | \
grep "Copied" >> "$HOME/MoveLog.txt"
я предлагаю сохранить целый журнал для диагноза, когда $HOME/MoveLog.txt
пусто.
я изменил свой кодекс, чтобы приложить (tee -a
, >>
) к журналам. Я учился бояться постоянно растущих файлов (которые не контролируют свободное место), таким образом, я должен disrecommend это решение.
Если Вы хотите сохранить существующую структуру / стиль сценария, Вы могли бы сделать что-то как
#!/bin/bash
exec 1> >(tee -a $HOME/MoveLog.txt | grep 'Copied' >> $HOME/CopiedLog.txt)
exec 2>&1
, Это перенаправляет stdout
(описатель файла № 1) к замена процесса , где мы сначала прилагаем его к основному файлу системного журнала $HOME/MoveLog.txt
, то фильтруем tee
d поток с grep и прилагаем это к вторичному журналу $HOME/CopiedLog.txt
, Так как это - сценарий удара, Вы могли заменить первое 1>
&>
и опустить отдельное exec 2>&1
переназначение.