Страница 1 из 1
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:29
zip
Всем привет!
Задача такая:
Необходимо инициировать соединения с локальной машины к удалённой, найти там в определённом каталоге файлы, созданные за последние сутки и передать эту выборку на локальный компьютер средствами SCP.
Сейчас я использую (и это работает корректно):
scp -r user@server:/some/directory /home/backups
Но я не хочу выгружать весь каталог, он большой, а только эти файлы - FIND /some/directory -mtime +1
Как я могу корректно совместить эти две команды (SCP и FIND)?
P.S.
Я знаю, что существует такой метод:
find /some/directory -mtime +1 -exec scp -r /some/directory user@server:/home/backups {} \;
Но это не вариант, так как инициализация должна происходить с локальной машины, а не наоборот.
Подскажите корректный синтаксис.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:31
WWolf
zip, rsync пользуй. жмёт на лету, качает только изменения и много других плюшек, которые понадобятся позже

SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:32
rogoznik
Так примонтируй папку к локальной машине. Сделай что надо. Размонтируй.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:37
slant
Вместо SCP посмотрите в сторону sshfs - будет намного проще с подобными пожеланиями.
http://www.linux.unn.ru/debian/node/54
Просто монтируете удаленную машину через ssh и делаете там с файлами что хотите в рамках прав, как на локальной.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:39
Chocobo
файндом вытащить список файлов удаленной машины,
ssh user@server "find /some/directory -mtime +1" > куданибудь.тхт
а затем циклом перебрать его на вызов scp с уже с локальной. типа такого
for file in $LIST; do scp user@server:$file /local/path/; done
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:48
zip
WWolf писал(а): ↑26 июл 2018, 11:31
zip, rsync пользуй. жмёт на лету, качает только изменения и много других плюшек, которые понадобятся позже
Вот эта идея мне нравится больше всего. С помощью rsync как раз делаю регулярные копии некоторых компонентов.
Но какой корректный синтаксис? Подключиться -> выбрать -> передать.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:49
Chocobo
zip писал(а): ↑26 июл 2018, 11:29
Я знаю, что существует такой метод:
find /some/directory -mtime +1 -exec scp -r /some/directory user@server:/home/backups {} \;
Но это не вариант, так как инициализация должна происходить с локальной машины, а не наоборот.
И еще немножко (хотя не, не немножко) откровенной шизофрении
find /some/directory -mtime +1 -exec ssh user@server2 "scp -r user@server:/home/backups {} /some/directory " \;
файнд удаленной машины долбится обратно на первую и оттуда инициирует scp, как задумано

SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:52
zip
darkfenix писал(а): ↑26 июл 2018, 11:32
Так примонтируй папку к локальной машине. Сделай что надо. Размонтируй.
Традиционными средствами mount unmount?
Интересно, сейчас почитаю об этом. Если не сложно, напишите как примонтировать удалённый каталог. Разве в mount/unmount есть такая возможность? Или это комбинированный приём?
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:54
WWolf
zip, такой же как и у SCP...
rsync -avz user@server:/home/backups /some/directory
в итоге у тебя в /some/directory будет лежать свежая версия с server:/home/backups
при этом скопируются только обновленные файлы, да ещё и на лету будет сжатие при передаче, что б меньше сеть нагибать
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:55
rogoznik
zip, в данном случае предложена только идея.
Для монтирования можно использовать предложенное в
#4. А после монтирования уже что больше нравится. Хоть твой вариант с
find
, хоть
rsync
.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 11:58
zip
И еще немножко (хотя не, не немножко) откровенной шизофрении
find /some/directory -mtime +1 -exec ssh user@server2 "scp -r user@server:/home/backups {} /some/directory " \;
файнд удаленной машины долбится обратно на первую и оттуда инициирует scp, как задумано
Ащ, Хардкор! Сохраню себе, попробую на виртуалке.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 12:13
zip
Слепил вот чего:
rsync -avz --files-from=<(ssh user@server 'find /backups/ -type f -mtime -1 -exec basename {} \;') user@server:/backups/ /home/user/backups
Жохает!
Спасибо друзья за подсказки.
P.S. Одна беда, при таком раскладе не стартует из крона. Крон начинает отрабатывать только если эту команду записать в .sh (Со всеми прибамбасами: #!/bin/bash) и сам файл добавить в crontab.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 12:15
WWolf
zip писал(а): ↑26 июл 2018, 12:13
--files-from=<(ssh user@server 'find /backups/ -type f -mtime -1 -exec basename {} \;')
а какой смысл сей конструкции? чёт не допераю...
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 12:20
zip
--files-from=<(ssh user@server 'find /backups/ -type f -mtime -1 -exec basename {} \;')
--files-from - указывает какие конкретно файлы надо тащить из списка.
Дальше идёт соединение и выборка, а затем, когда выборка сделана, выполняется basename, очищающий названия файлов от путей (здесь в буфер попадает выбранная группа файлов). Это весьма удобно в том смысле, что нет необходимости писать результат поиска в файл.
Реально работает, проверил под разными соусами.
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 12:24
WWolf
так rsync и так скопирует только новое и/или изменённое, зачем ещё доп выборка?
SCP + FIND с инициацией с локальной машины
Добавлено: 26 июл 2018, 12:43
zip
WWolf писал(а): ↑26 июл 2018, 12:24
так rsync и так скопирует только новое и/или изменённое, зачем ещё доп выборка?
Точно. Перемудрил.
А вообще, пригодится. Выборку ведь можно делать по каким хочешь признакам, мало ли чего понадобится.
И вот сейчас весь директорий грузить нет необходимости, только последний файл, из тех что делаются посуточно. Если весь каталог выгрузить, больше 30 гиг тащить придётся. А нужен только последний.