Rsync удаленно локальные только файлы старше определенного времени
Я хочу rsync с удаленного на локальные файлы, которые старше (или новее), чем определенное время.
Я видел ответы, которые говорят find /src/path -mtime -1 | rsync ...
но это работает, только если каталог виден локально. Поскольку он удаленный, он не виден.
Так как я могу запустить find
на удаленном и rsync его результаты обратно на локальный?
2 ответа
Вы можете использоватьfind
в качестве аргумента удаленного пути в rsync:
rsync -av $REMOTE:'`find /src/path -type f -mtime -1 -print`' $LOCAL_PATH
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
аргумент (который может ссылаться на стандартный ввод, используя --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
спецификаторы -типа, но дальнейший разбор строки даты (например, используя date
) можно было бы продлить это.