1

Я пытаюсь использовать PuTTY для подключения через SSH к Mac и загрузки некоторых файлов, указанных с помощью команды find. В файлах есть пробелы, которые могут вызывать проблемы, и я не уверен, как указать локальный путь Windows.

Я пытаюсь что-то вроде этого, пока безуспешно

find . -iname "*searchtext*" | xargs -0 scp user@host:{} localpath

Есть идеи?

Если невозможно использовать одну строку, я не возражаю против сценария Bash, который можно вызвать через PuTTY?

2 ответа2

3

Лучше всего, если вы создаете zip или tgz файлы на удаленном сервере.

zip found-files.zip $(find . -iname "*searchtext*")

А затем просто используйте winscp, чтобы загрузить файл found-files.zip. Winscp будет аутентифицировать то же самое, что и putty (пароли или использует пагент, если работает). Если вы предпочитаете командную строку dos, вы можете использовать pscp

1

Я пытаюсь использовать PuTTY для подключения через SSH к Mac и загрузки некоторых файлов, указанных с помощью команды find.

Вы пытаетесь загрузить файлы в локальную систему Windows?

Помните, что PuTTY является SSH-клиентом. Все, что он делает, это отправляет напечатанный текст на ваш Mac и отображает полученный вывод. Поэтому, когда вы запускаете scp как этот, он запускается на Mac, и имена файлов должны быть указаны, как видно на Mac.

Если вы хотите перенести файлы с Mac на Windows, то это scp macpath user@windowshost:windowspath . (Похоже, вы изменили это в своей примерной команде.)

Это также означает, что вашему компьютеру Windows необходим SSH-сервер, на котором установлены возможности SCP, и что он должен разрешать входящие SSH-соединения.


Я не уверен, как указать локальный путь Windows.

Это зависит от того, какой SSH-сервер установлен в Windows. (См. Пункт выше.) Но обычно x:\dir\file можно преобразовать в /x/dir/file . Прочтите руководство.


В файлах есть пробелы, которые могут вызывать проблемы

Да, это вызывает проблемы с xargs . Вы пошли в правильном направлении с xargs -0 , но вам нужно сделать то же самое с find - find .... -print0 или find .... -printf "%p\0" .

Если версия find в Mac OS X не поддерживает ни -print0 ни -printf , вы можете избежать использования новых строк в качестве разделителей. В этом случае не добавляйте никаких специальных параметров для find , но измените xargs -0 на xargs -d '\n' .

Лучшая альтернатива xargs - find -exec .


xargs -0 scp user@host:{} localpath

Здесь есть еще одна ошибка. По умолчанию xargs не заменяет {} именем файла; Вы должны конкретно указать это, используя -I "{}" .

Возможно , вы спутали это с -exec вариант в find который не работает , как это:

find . -iname "*searchtext*" -exec scp user@host:{} localpath \;

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .