Как работают символические ссылки в Dropbox?

20

Я сделал несколько ссылок на файлы в папке. Когда я добавил эту папку в Dropbox, ссылки содержали дублированные копии файлов, на которые они ссылаются. У вас была эта проблема? Вы понимаете, что происходит? Есть ли решение?

Чтобы прояснить этот вопрос: в столбце «Тип» файлового менеджера перед подключением к Dropbox было показано, что Link_to_notes является ссылкой, а размер составляет 32 байта. После подключения к Dropbox было показано, что Link_to_notes представляет собой простой текстовый документ, и его размер составляет 18,7 КБ, размер файла заметок.

user119046
источник
2
Поскольку Dropbox является кроссплатформенным решением, любое другое поведение, вероятно, будет еще более запутанным - как он будет себя вести, если вы синхронизируете свою папку с машиной Windows?
Сергей
С середины 2019 года Dropbox больше не следует по символическим
ссылкам
На момент написания статьи символические ссылки больше не работают, и это отстой.
Jus12

Ответы:

15

DropBox следует по символическим ссылкам и рассматривает их как каталоги. Это действительно полезно для резервного копирования без необходимости перемещать файлы и каталоги в каталог DropBox.

$ ln -s ~/Documents/ ~/Dropbox/Documents
Gregology
источник
Это может быть опасным поведением. Например, если я удаляю ссылку из каталога Dropbox, возможно, существует какой-либо сценарий, при котором я мог бы также случайно удалить свои исходные файлы или папки?
Викон
@ Викон, это не опасное поведение, это ожидаемое поведение. Но да, для ясности, если вы удалите символическую ссылку, файлы также будут удалены из Dropbox
Gregology
2
В сообществе Dropbox снова и снова указывалось, что Dropbox не поддерживает символические ссылки и настоятельно рекомендует не использовать его. Если вы обратитесь в службу поддержки Dropbox, они попросят вас удалить любую символическую ссылку, прежде чем продолжить. Конечно, люди все еще могут использовать его, но это не поведение, предназначенное Dropbox, и оно может быть опасным (потеря файлов), проблематичным (непреднамеренная синхронизация дублированных файлов, что является проблемой, которую необходимо решить в этом вопросе), а также как проблемы с производительностью и т. д.
Vicon
@Vicon, символические ссылки работают прозрачно для многих операций: программы, которые читают или записывают файлы, названные символической ссылкой, будут вести себя так, как если бы они работали непосредственно с целевым файлом
Gregology
1
Этот метод долго работал для меня в файловых системах ext4. У меня нет ощущения опасности, потому что я никогда не взаимодействую с файлами Dropbox в Dropbox. Ему удается связать воедино мои системы Linux и планшеты Android. Тем не менее, я заметил, что эта ссылка говорит о том, что мой совет устарел help.dropbox.com/installs-integrations/sync-uploads/symlinks
pauljohn32
7

Лучший способ сделать это - хранить файлы в папке dropbox и ссылаться на них извне ...

Создайте ~ / Dropbox / Documents and symlink:

ln -s ~/Dropbox/Documents ~/Documents

Это перестает сбивать с толку Dropbox и деинсталлировать все, что является ссылкой внутри, потому что у вас есть все вещи внутри, и вместо этого, когда вы хотите, чтобы они были в другом месте, вы ссылаетесь на них в Dropbox. Основное правило: не размещайте символические ссылки внутри папки dropbox ... размещайте их вне папки dropbox, и у вас не возникнет проблем.

У меня есть Dropbox на нескольких машинах с Ubuntu, и все мои основные папки верхнего уровня хранятся в Dropbox.

JamesC
источник
Почему Dropbox запутался? И как Dropbox может изменить символические ссылки? Символьные ссылки автоматически разрешаются файловой системой
Gregology
6

dropbox будет следовать ссылкам sym на каталоги, но он разорвет ссылку (sym или hard) на файл и заменит ее файлом.

brad80242
источник
2

TL; DR: ниже приведен способ получить поведение, очень похожее на символические ссылки, только на уровне графического интерфейса пользователя (GUI), что особенно полезно, если вы не хотите, чтобы DropBox повторно копировал одни и те же файлы в разные папки в DropBox. иерархия только потому, что вы хотите просматривать их из разных мест (например, пути к папкам).

Фон

Неоднократно меня сжигали дубликаты папок DropBox, если я создавал символические ссылки (символические ссылки) в иерархии папок DropBox, даже до момента заполнения моей учетной записи. Как отмечают многие в Интернете, в DropBox нет правильного решения проблемы правильной обработки символьных ссылок, что вызывает сожаление, поскольку им не составит труда сделать это.

Временное решение

Однако я могу использовать один обходной путь для достижения эквивалентного поведения символических ссылок в иерархии DropBox - то, что другие часто называют «внутренними символическими ссылками» - без дублирования DropBox - это создание эквивалента файла ярлыка Windows (т.е. файл .lnk в экосистеме MS). Я делаю это, создавая файл .desktop, который открывает файловый менеджер моей системы по нужному пути. Таким образом, этот обходной путь работает только на уровне графического интерфейса и только для XDG-совместимых систем (например, Ubuntu, системы на основе GNOME и многие другие).

пример

Например, я читаю передовые методы Python для новой работы, которую я беру, и PDF-файлы, которые я читаю, хранятся в моей папке DropBox для приложения GoodReader (iOS), поэтому я могу читать их оба на своем рабочем столе. и с моими мобильными устройствами. Вместо того, чтобы переходить к этой папке ( /home/morse/lib/active/GoodReader/Books/Python), я просто создаю Python.desktopпапку /home/morse/Desktopсо следующим содержимым:

#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Name=Python
Exec=nautilus /home/morse/lib/active/GoodReader/Books/Python
Icon=/usr/share/icons/MacBuntu-OS/places/96/stock_folder.png
Terminal=false

(Примечание: Убедитесь , что адаптировать Exec=nautilus ...часть , если вы используете файловый менеджер, кроме Nautilus, и, конечно , вы хотите , чтобы адаптировать Name=, Icon=и путь часть Exec=линии для каждого «линка» , который вы хотите создать.)

При этом на рабочем столе я вижу папку с именем Python, которая действует как символическая ссылка, то есть я дважды щелкаю по ней, и она открывает соответствующую папку, но только небольшой текстовый файл (например, Python. Desktop) синхронизируется с DropBox и другими моими системами (в отличие от всего содержимого, которое в конечном итоге дублируется DropBox).

Как и в случае других файлов .desktop, права доступа должны быть установлены таким образом, чтобы файл был как читаемым, так и исполняемым (например, chmod 700 Python.desktopили chmod 755 Python.desktop) для отображения указанного значка и для двойного щелчка по нему, чтобы фактически что-либо сделать.

Резюме

Итак, у меня всегда будут фактические файлы, доступные где-то в DropBox - в этом примере /home/morse/lib/active/GoodReader/Books/Python- но у меня также будет ярлык на рабочем столе для всех моих систем на основе Linux, для которых я также настроен DropBox.

Конечно, этот обходной путь не работает на уровне командной строки, как действительная символическая ссылка.

Тем не менее, это, кажется, новый обходной путь на уровне графического интерфейса, который я не видел в других местах. Поэтому я надеюсь, что этот подход может быть полезен для других.

Даг Морс
источник
Это гений! Я не видел решения для внутренних символических ссылок до сих пор! И это супер аккуратно. Спасибо, что сделали мой день! Я должен добавить, что было бы довольно просто создать сценарий командной строки, который анализирует файл .desktop и открывает файл или папку с символическими ссылками, хотя вы не сможете напрямую "cd" войти в каталог.
Правин
0

Сожмите ваши ссылки и сохраните сжатый файл в Dropbox

Предыдущие ответы являются исчерпывающими и ясными. Я просто предлагаю три обходных пути, основанные на одном принципе. Третий выглядит сложнее, но очень эффективно. Идея такова: сжать ваши символические ссылки в файл tar, который Dropbox не будет рассматривать как ссылку, и сохранить его в Dropbox. Третий способ почти такой же прямой, как копирование ваших ссылок непосредственно в Dropbox - на самом деле гораздо быстрее, чем копирование нескольких ссылок одна за другой.

У меня есть около двадцати символических ссылок, которые я обычно использую в своей установке Lubuntu, например, для быстрого доступа к bash-сценариям, сохраненным в Dropbox, к внешним hdds, часто используемым документам и т. Д. Они все находятся в моем домашнем каталоге и в Desktop, и я нахожу его удобно иметь их копию Dropbox для использования в других установках или когда я dist-upgrade (то есть когда я переустанавливаю после попытки dist-upgrade;).

1-й путь

Вы создаете каталог MyLinks (скажем, в Documents) и копируете на него все свои домашние символические ссылки; если у вас есть символические ссылки в других каталогах, создайте подкаталоги в MyLinks и скопируйте в них свои символические ссылки. Например, если ссылки, которые вы хотите сохранить, находятся дома и на рабочем столе, скопируйте домашние ссылки на MyLinks, создайте в нем каталог с именем Desktop и скопируйте на него ссылки рабочего стола. Затем откройте Terminal, cd Documents (при условии, что это каталог, в котором находится MyLinks) и создайте tar-файл:

tar -cvf MyHomeLinks.tar MyHomeLinks

(Не забудьте добавить расширение ".tar" к имени файла tarfile, иначе Ubuntu Archive Manager откажется его открывать.) Если вы сделаете это, будьте осторожны, чтобы не добавить параметр -h (--dereference) в tar, потому что он будет точно вести себя как Dropbox и сжимать целевые файлы вместо символических ссылок. (Кстати, такое поведение было бы желательно в большинстве случаев, особенно если кто-то стремится к переносимости, но это не так, если кто-то хочет сохранить символические ссылки как символические ссылки.)

Файл tar также будет содержать временно прерванные ссылки, такие как ссылки на внешние жесткие диски, которые в данный момент не смонтированы, - это нормально.

Сохраните файл tar в вашем Dropbox. Когда вам понадобятся ссылки назад, скопируйте файл tar в каталог в вашей файловой системе (не в Dropbox), распакуйте его (просто щелкните правой кнопкой мыши и выберите «Извлечь здесь») и скопируйте символические ссылки обратно в места, где вы хотите их получить. ,

2-й способ

Если символические ссылки, которые вы хотите сохранить, имеют однозначный префикс (например, «MySl» ...), вы можете очень быстро создать свой tarfile следующим образом (добавлены ненужные пробелы, чтобы избежать ошибок):

find   .   -name   "MySl*"|xargs  tar  cvf  MyLinks.tar

Точка после «найти» означает текущий каталог: откройте «Терминал» в своем домашнем каталоге (по умолчанию). Вы можете обязательно добавить путь к файлу tar и выполнить команду из другого каталога, который не является домашним: замените «.» с путем к вашему дому / пользователю. Не нужно делать рабочие каталоги, как MyLinks выше. Восстановление символических ссылок также выполняется быстро: вы копируете tarfile на дом, нажимаете на него правой кнопкой мыши и «извлекаете здесь». Однако, прежде чем начать префикс всех имен ваших символических ссылок, взгляните на следующую опцию.

3-й способ (и лучший)

Очень быстрый способ собрать все ваши символические ссылки в tar-файле: открыть Терминал в вашем доме / пользователе (который используется по умолчанию при открытии Терминала) и:

find  .  -type  l|xargs  tar  -cvf  AllLinks.tar

Недостатком является то, что вы получаете ВСЕ ваши ссылки, включая некоторые символические ссылки на mozilla или hplip, о которых вы даже не подозревали. Чтобы избежать этого и скопировать все и только символические ссылки из указанного списка каталогов без рекурсии , вы пишете список после «find» в приведенной выше команде. Скажем, вы хотите сохранить ссылки из дома / пользователя и рабочего стола; ты можешь написать

 find /home/<USER>/ /home/<USER>/Desktop/ -maxdepth 1 -type l|xargs tar -cvf MyLinks.tar

«-maxdepth 1» предназначен для предотвращения повторного обнаружения находки в доме. Вы можете добавить путь к tarfile, если хотите. В качестве альтернативы:

 find .  Desktop -maxdepth 1 -type l|xargs tar -cvf MyLinks.tar

Если вы ленивы и хотите использовать это часто, вы можете добавить его в качестве псевдонима к .bashrc или .bash_aliases в вашем домашнем каталоге (.bash_aliases - очень удобный способ сбора ваших псевдонимов и, почему бы и нет, сохранения их в Dropbox ...). Просто создайте новый пустой файл с именем .bash_aliases в вашем домашнем каталоге (то есть / home / user), откройте его в текстовом редакторе и напишите в нем следующую строку:

alias save_symlinks='find . Desktop -maxdepth 1 -type l|xargs tar -cvf MyLinks.tar'

Замените каталоги после «find» теми, которые вы выбрали, а «save_symlinks» - именем команды по вашему выбору. Чтобы восстановить, откройте ваш файловый менеджер (если путь к каталогам в приведенной выше команде не абсолютен, tarfile должен быть в home / user), щелкните правой кнопкой мыши и распакуйте.

Если вы сделаете это, жизнь станет проще. Все, что вам нужно сделать, это:

SAVE: введите save_symlinks в терминале, сохраните tarfile у себя дома в Dropbox; ВОССТАНОВЛЕНИЕ: скопируйте файл из Dropbox в вашу домашнюю директорию, щелкните по нему правой кнопкой мыши и выберите «извлечь здесь».

Арчи
источник