Вывод scp из удаленного grep обратно на мою машину в сценарии

Я пытаюсь написать сценарий, который будет использовать сессию ssh для выполнения grep в огромном лог-файле, отразить выходные данные во временный файл и скопировать временный файл обратно на клиентский компьютер:

ssh user@server  grep pattern logfile.log | cat > temp.txt
scp user@server:/temp.txt .

Каков наилучший способ написать такое действие в сценарии?

2 ответа

Решение

Вы можете сделать это за один шаг:

ssh user@server "grep pattern logfile.log" > temp.txt

Это будет ssh на удаленный хост, выдайте grep pattern logfile.log на этом удаленном хосте и перенаправить вывод всего ssh команда в ваш локальный файл temp.txt,

В этом случае цитирование имеет большое значение, т. Е. Важно, чтобы вы поместили цитаты ", Например

ssh user@server "grep pattern logfile.log > temp.txt"

будет записывать вывод в файл на удаленном хосте (не то, что вы хотите), потому что он запускает полный "grep pattern logfile.log > temp.txt" на этом хосте. Но в первом случае только команда запускается удаленно, и перенаправление происходит на вашем локальном хосте.

Прежде всего, вам не нужно передавать команду cat, просто перенаправьте его:

grep pattern logfile > mylog.log

Так же temp.txt будет создан на вашем компьютере, а не на сервере, чтобы создать его на сервере, вы должны указать команду:

ssh user@server "grep pattern logfile | whatever > temp.log"

Я бы пошел с:

ssh user@server grep pattern logfile.txt > mylog.log

Было бы бежать grep pattern на logfile.txt затем создает mylog.log на моей машине.

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