Я хочу rsync с удаленного на локальные файлы, которые старше (или новее), чем определенное время.

Я видел ответы, которые говорят, что find /src/path -mtime -1 | rsync ... но это работает, только если каталог виден локально. Поскольку он удаленный, он не виден.

Итак, как я могу запустить find на удаленном компьютере и rsync вернуть его результаты на локальный компьютер?

1 ответ1

0

В rsync есть --list-only , которая предоставляет индекс удаленных файлов, включая метки времени:

$ rsync --list-only $REMOTE
drwx------            160 2018/09/04 12:55:12 .
-rw-r--r--          1,348 2018/09/04 12:52:33 .bash_profile
-rw-r--r--             55 2018/09/04 12:52:33 .bashrc
...

Фильтрация в этом списке для выбора только подходящих дат, а затем подача этого в последующий аргумент rsync --files-from (который может ссылаться на stdin с помощью --files-from=-) должна выполнить эту работу.

Например, следующее будет rsync файлы с mtime между 2018-08-01 и 2018-08-07 на локальный компьютер (с соответствующими значениями $REMOTE и $LOCAL_PATH ; примечание $5 в команде awk относится к пятому столбцу - т.е. имя файла - из вывода rsync)

$ rsync --list-only $REMOTE | awk '/2018-08-0[1-7]/ {print $5}' | rsync --files-from=- $REMOTE $LOCAL_PATH

Это не решает проблему использования спецификаторов find 's -mtime -type, но дальнейший анализ строки даты (например, использование date) может быть выполнен для ее расширения.

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