Подключение через plink и перенаправление в файл, не получение всего необходимого вывода в файле

Я использую пакетный файл в Windows для подключения к компьютеру с Linux через SSH с помощью plink, чтобы проверить, обновлены ли два определенных файла (у них должна быть сегодняшняя дата).

Команда, которую я использую в пакетном файле Windows для выполнения plink:

plink.exe -ssh root@%THEIP% -m checkfiles.txt > temp\fileDates.txt

«checkfiles.txt» на компьютере с Windows содержит:

ls -l /folder/*file.dat.v* /folder/*file2.dat.v* > awk '{print $7}'

Затем я перехожу к чтению «fileDates.txt», чтобы увидеть, присутствуют ли оба файла и их даты.

Я мог бы удалить часть > awk '{print $7}' и сделать это вручную в пакетном файле.

Проблема возникает, когда файл отсутствует, я получаю, например:

ls: cannot access /folder/*file.dat.v*: No such file or directory

Я получаю это сообщение на экране, а не в «fileDates.txt», и я получаю только дату для второго файла, без ошибки о том, что первый файл не найден.

Я хотел бы иметь ошибку «Нет такого файла ...» в «fileDates.txt», поэтому я пробовал разные методы перенаправления безрезультатно.

Если это невозможно, как я могу определить, что один файл, другой или оба отсутствуют?

Заранее спасибо.


person heffeque    schedule 19.03.2014    source источник


Ответы (2)


Вы можете использовать 2> для захвата сообщений об ошибках:

ls -l /folder/*file.dat.v* /folder/*file2.dat.v* > awk '{print $7}' 2> sed '"s|ls: cannot access .*|No such file $name_of_variable_with_file_you_want_to_access|"
person PlasmaPower    schedule 19.03.2014
comment
Привет! Спасибо за ваш быстрый ответ! --- temp\fileDates.txt по-прежнему не получает часть 2› --- Я действительно не понимаю, почему вы поместили туда переменную в конце. - person heffeque; 20.03.2014
comment
Записываемый файл находится в Windows, а не в Linux. Линукс не видит файл. ›2 нужно отправить в plink, затем plink (в Windows-машине) отправляет его в файл (в windows). --- Что я ищу, так это то, что в temp\fileDates.txt есть это: ls: cannot access /folder/*file.dat.v*: No such file or directory <enter> 20 - person heffeque; 20.03.2014

Я нашел ответ. Спасибо @PlasmaPower за вашу помощь (я бы проголосовал за ваш ответ, но у меня недостаточно репутации).

Нужны были две строчки кода:

ls -l /folder/*file.dat.v* /folder/*file2.dat.v* &> $HOME/checkfiles.txt
cat $HOME/checkfiles.txt  | awk '{print $7}'

Первая делает временный файл как с stdout, так и с stderr, затем другая строка выполняет команду awk.

Большое спасибо!

person heffeque    schedule 20.03.2014