Это подход, который я бы попробовал в Linux. У меня нет опыта работы с Google Filestream, Google Drive и Synology CloudSync, поэтому я не могу сказать, можно ли применить решение вообще. Тем не менее, я надеюсь, что это, по крайней мере, даст вам некоторые идеи.
Предположения
- Вы можете установить долю дерева каталогов, поэтому
mv
,cp
и другие нормальные инструменты могут работать с каталогами, как если бы они были локальными; - файлы (или каталоги) с путями, которые становятся идентичными после удаления всех
(N)
строк, фактически являются экземплярами одного и того же файла (каталога); - экземпляры одного и того же файла должны оставлять только один файл;
- экземпляры одного и того же каталога должны объединять их содержимое в одном каталоге;
- Вы можете использовать все инструменты, которые я использую здесь.
Процедура
Пожалуйста, прочитайте весь ответ, прежде чем пытаться что-либо сделать.
Я думаю, что некоторые шаги могут быть написаны в виде сценария, но, поскольку решение очень экспериментальное, лучше делать это вручную, шаг за шагом, обращая внимание на то, что происходит.
В оболочке
cd
к точке монтирования и вызоваfind . | vidir -
; используйте текстовый редактор по вашему выбору, напримерkate
, так:find . | EDITOR=kate vidir
Откроется редактор со списком всех объектов, каждый со своим номером впереди. Когда вы изменяете содержимое, сохраняете (временный) файл и закрываете редактор, все изменения применяются. В общем, это то, что вы можете сделать:
- изменить пути для перемещения (переименования) файлов или каталогов;
- удалять строки для удаления файлов или каталогов;
- поменяйте местами два или более номеров, чтобы поменять файлы (вам это не понадобится).
Не сохраняйте файл, если вы не уверены, что новый контент описывает дерево каталогов, которое вы хотите получить.
Скопируйте содержимое из редактора в другой файл. Суть в том, чтобы работать с ним и вставлять результат обратно (и сохранять его) только тогда, когда вы уверены, что все правильно поняли. Следующие шаги относятся к новому файлу, если явно не указано иное.
Используйте
sed
или любой другой инструмент, чтобы избавиться от всех(N)
строк (обратите внимание на начальный пробел). На этом этапе вы должны получить «чистые» пути, многие из которых будут встречаться более одного раза (с разными номерами, заданнымиvidir
).Используйте
sort -k 2
для сортировки по этим путям. Благодаря-s
первомуAnalysis
все еще должно предшествовать первоеAnalysis (1)
.Используйте
uniq -f 1
для удаления дублированных путей. Теперь любой путь должен пройти только один раз.Дважды проверьте работоспособность структуры каталогов, закодированных в результате.
Вставьте результат в оригинальный редактор, сохраните файл и выйдите из редактора.
vidir
удалит объекты, связанные с отсутствующими номерами, и переместит объекты, связанные с оставленными номерами.
тестирование
Сначала я бы использовал это решение для репликации структуры каталогов:
cp -a --attributes-only /mountpoint/ /guinea_pig_dir/
и протестируйте процедуру на полученных пустых файлах. Это должно выявить проблемы (если таковые имеются) и, надеюсь, позволит улучшить метод.
Возможные проблемы
vidir
отказывается работать с некоторыми нестандартными персонажами.Вообще порядок объектов важен. Есть несколько ловушек, которые генерируют такие объекты, как
foo~
илиfoo~1
,foo~2
когда происходит столкновение сfoo
. Вы будете «сокращать» дерево каталогов таким образом, чтобы не возникало коллизий, но я не исследовал все возможные сценарии. Я действительно думаю, что вы должны поэкспериментировать с/guinea_pig_dir/
и посмотреть, что вы получите. В случае неприятностей может быть умныйsort
междуfind
иvidir
поможет.