rclone - это rsync для облачных хранилищ. Однако её можно использовать и для работы с локальной файловой системой. Если вы хотите из командной строки копировать, скачивать, синхронизировать и даже монтировать облачные хранилища, то rclone для этого подойдет идеально. Среди популярных бэкендов:
Несмотря на множество контрибьюторов, проект, по большей части, поддерживается одним разработчиком из UK, Ником Крей-Вудом (Nick Craig-Wood). Проект написан на Go, 44k+ звезд на GitHub, более 700 контрибьюторов.
OpenStack - это IaaS платформа, набор открытых решений, с помощью которых можно сделать своё приватное обалако вроде AWS.
sync позволяет однонаправленную
и двунаправленную синхронизацию
Есть набор расширяющих функционал виртуальных стораджей, из которых самые интересные это:
crypt добавляет слой шифрования;
union позволяет создать синтетический сторадж, объединяющий несколько других стоарджей для
чтения и записи;
Самое очевидное применение - это создания резервных копий в обалчном хранилище. Есть известное правило "3-2-1", касающееся бэкапов.
rclone идеально подойдет для решения этих задач.
Для работы с командной строкой используется популярный репозиторий spf13/cobra (36k stars).
В качестве http мультиплексора и раутера используется легковесный go-chi/chi (17k stars).
Сбор иехрархической информации организован плоско: в настоящий момент ты находишься на определенном шаге и может перейти на любой другой. Состояние сохраняется в конфигруационном файле по мере ввода данных.
На моем Ubuntu Desktop я использую ncdu для быстрого визуального анализа самых больших
по размеру директорий/файлов и так могу быстро освободить место на жестких дисках. В rclone есть
встроенный ncdu
rclone можно запустить в режиме API сервера для приема команд, которые он будет тут же исполнять. В этом режиме можно выполнять все те же команды, что и в CLI. Например, зарегистрировать хранилище и примонтировать его.
fs - это ключевой пакет проекта и здесь определены самые важные механики работы с
файловыми ситемами. Пакет vfs обеспечивает высокоуровневый функционал вокруг fs: лок файлов,
символические ссылки, кеширует директории и т.д. vfs предоставляет доступ к облачным
объектам похожим образом на то, как это реализовано в пакете os.
Краткое представление о том как устроено приложение можно получить глянув на типы в пакете fs.
В проекте 69 имплементаций этого
Файловая система - это всё, что удовлетворяет интерфейсу fs.Fs, а именно:
метод List);
NewObject);
Put);
Mkdir);
Rmdir).
В пакете vfs главный интерфейс - это Node:
type Node interface {
os.FileInfo
IsFile() bool
Inode() uint64
SetModTime(modTime time.Time) error
Sync() error
Remove() error
RemoveAll() error
DirEntry() fs.DirEntry
VFS() *VFS
Open(flags int) (Handle, error)
Truncate(size int64) error
Path() string
SetSys(interface{})
}