Как отфильтровать исполнительный журнал с grep?

Я запускаю скрипт, который перемещает файлы от моего жесткого диска до 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

Так как эта команда возвращает только более важные части журнала.

Как я могу реализовать это на первом сценарии, заставив это зарегистрировать только строки, которым "скопировали" текст в них?Спасибо.

0
задан 9 August 2019 в 14:20

3 ответа

Кажется, что Вы хотите отфильтровать продукцию обоих, stdout и stderr и приложить его к файлу системного журнала:

rclone move localfolder remotefolder &> /dev/stdout | grep Copied >> /home/user/MoveLog.txt

должен сделать то, что Вы хотите. Я думаю двоеточие, которое Вы используете в Вашем rclone - команда не принадлежит там, таким образом, я пропустил его, но я мог бы быть неправым в этом пункте.

0
ответ дан 23 October 2019 в 06:33

Это кажется чрезмерно сложным, как насчет

#!/bin/bash
rclone move localfolder remotefolder: |& \
    tee -a "$HOME/MoveLogEntire.txt" | \
    grep "Copied" >> "$HOME/MoveLog.txt"

я предлагаю сохранить целый журнал для диагноза, когда $HOME/MoveLog.txt пусто.

я изменил свой кодекс, чтобы приложить (tee -a, >>) к журналам. Я учился бояться постоянно растущих файлов (которые не контролируют свободное место), таким образом, я должен disrecommend это решение.

3
ответ дан 23 October 2019 в 06:33

Если Вы хотите сохранить существующую структуру / стиль сценария, Вы могли бы сделать что-то как

#!/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 переназначение.

2
ответ дан 23 October 2019 в 06:33

Другие вопросы по тегам:

Похожие вопросы: