debug1: key_load_public: No such file or directory
Строка выше - это не ошибка, а простой отладочный журнал, говорящий о том, что
ssh
клиент не может найти отдельный открытый ключ (с именем~/.ssh/id_rsa.pub
). Этот файл не нужен для подключения к удаленному серверу, но он может быть полезен.Фактическая ошибка
ssh_exchange_identification: read: Connection reset by peer
указывает на ошибку в конфигурации сервера. Сервер запущен, но не может принять SSH-соединение. Проверьте журнал сервера для получения дополнительной информации. Похожие проблемы
С инструментами GNU (Оболочка GNU или другая оболочка с поддержкой ksh подстановка процессов (<(...)
), GNU xargs
или совместимая, как FreeBSD (для -a
, -r
,-0
), GNU mv
для -t
, GNU awk
дляnextfile
(также поддерживается некоторыми другими реализациями; он будет проигнорирован, но менее эффективен там, где не поддерживается)):
xargs -r0a <(
find dir -type f -exec awk 'FNR == 2 {
if (substr($0, 8, 2) == "EL" && substr($0, 42, 4) == "2017")
printf "%s\0", FILENAME
nextfile}' {} +) echo mv -it /somewhere
(удалить echo
если доволен)
В системах, отличных от -GNU, вы можете изменить его на:
{
find dir -type f -exec awk -v q="'" '
function quote_for_xargs(s) {
gsub(q, q "\\" q q, s)
gsub("\n", q "\\\n" q, s)
return q s q
}
FNR == 2 {
if (substr($0, 8, 2) == "EL" && substr($0, 42, 4) == "2017")
print quote_for_xargs(FILENAME)
nextfile
}' {} + | xargs sh -c '
[ "$#" -eq 0 ] || exec echo mv -i "$@" /somewhere <&3 3<&-' sh
} 3<&0
(удалить echo
если устраивает ).
То есть иметь find
вызов awk
для каждого текстового файла. В awk
для второй строки каждого файла (FNR==2
), если выполняются условия, выведите имя файла в формате, подходящем для вводаxargs
(xargs, который рассматривается как список слов, разделенных пробелами или символами новой строки, и где одинарные и двойные кавычки, а также обратную косую черту можно использовать для экранирования разделителей или друг друга ). Например, файл с именем ./That's tough.log
будет выводиться как './That'\''s tough.log'
.
xargs
использует этот вход для передачи как можно большего количества аргументов в sh
. Нам нужна оболочка sh
, потому что каталог назначения должен быть последним аргументом. Нам нужен -i
, потому что, поскольку файлы попадают в один и тот же каталог, существует вероятность потери данных, если перемещаются два файла с одинаковым именем в разных каталогах. Нам нужен mv
стандартный ввод (для -i
подсказки )к , а не быть каналом из find
, следовательно, использование временного fd 3 для пересылки внешнего стандартного ввода на sh
для sh
, чтобы установить mv
стандартный ввод для этого.