Scp несколько файлов, созданных за последний день с сервера на локальные сбои - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу получить несколько файлов, сгенерированных за последние 1 день, с сервера на локальный. Я использую следующую команду, которая говорит: «Нет такого файла или каталога».

find username@server.xyz.com:/path-from-which-files-need-to-be-copied/ -type f -ctime -1 | xargs -ILIST scp LIST /Users/abcUser/Documents/test/

Ошибка find: username@server.xyz.com: / путь к файлам, которые необходимо скопировать /: нет такого файла или каталог

PS: я могу получить доступ к этому местоположению и scp из этого местоположения для отдельных файлов с именами файлов.

1 Ответ

1 голос
/ 12 февраля 2020

find можно найти только локальные файлы. Итак, запустите find на удаленном сервере, что-то вроде:

ssh username@server.xyz.com find /path-from-which-files-need-to-be-copied/ -type f -ctime -1 |
xargs -ILIST scp username@server.xyz.com:LIST /Users/abcUser/Documents/test/

Обратите внимание, что xargs по умолчанию анализирует \ и цитирует его по-своему. Лучший способ передать результат find - это использовать поток с нулевым завершением:

ssh username@server.xyz.com find /path-from-which-files-need-to-be-copied/ -type f -ctime -1 -print0 |
xargs -0 -ILIST scp username@server.xyz.com:LIST /Users/abcUser/Documents/test/   

Но xargs будет запускать отдельный сеанс scp для каждого файла, который будет очень медленным. Так что оптимизируйте его, запустив один scp для всех файлов, я думаю, вы могли бы сделать это примерно так:

ssh username@server.xyz.com find /path-from-which-files-need-to-be-copied/ -type f -ctime -1 -printf 'username@server.xyz.com:%p\\0' |
xargs -0 sh -c 'scp "$@" "$0"' /Users/abcUser/Documents/test/
...