dropbox 会同步硬链接吗?

dropbox 会同步硬链接吗?

我有一个包含大量文件的文件夹。我希望该文件夹同时位于两个不同位置 - 我的“家庭”文档和我的“大学”文档文件夹。

我已经通过 College 文件夹中到 Home 文件夹的符号链接完成了此操作。

不幸的是,Dropbox 同步了我的大学文件夹 - 我的文件空间很快就用完了。

Dropbox 是否遵循硬链接,如果是,我该如何创建一个?

答案1

不,不是的。

当您更新文件时,Dropbox 会断开所有链接。因此,在 @Falk 上面给出的示例中,如果他从远程计算机编辑该文件,则当同步回来时,链接将断开,并且 Dropbox 将包含一个名为 的新文件testfile (Falks conflicted copy)

唯一有效的链接是软链接,其中原始文件是 dropbox 文件夹中的文件。这是我用来测试的脚本:

# symlink with target inside dropbox
echo "symbolic link test" > ~/Dropbox/symlinkToDropbox.txt
ln -s  ~/Dropbox/symlinkToDropbox.txt ~/symlinkToDropbox.txt
cat ~/symlinkToDropbox.txt
echo "edit target of symlink" >> ~/Dropbox/symlinkToDropbox.txt
echo "edit symlink" >> ~/symlinkToDropbox.txt 
cat ~/symlinkToDropbox.txt 
cat ~/Dropbox/symlinkToDropbox.txt 
# symlink with target outside dropbox 
echo "symbolic link test" > ~/symlinkFromDropbox.txt
ln -s ~/symlinkFromDropbox.txt ~/Dropbox/symlinkFromDropbox.txt  # relative symlinks don't work
cat ~/Dropbox/symlinkFromDropbox.txt 
echo "edit target of symlink" >> ~/symlinkFromDropbox.txt
echo "edit symlink" >> ~/Dropbox/symlinkFromDropbox.txt
cat ~/symlinkFromDropbox.txt 
cat ~/Dropbox/symlinkFromDropbox.txt 
# hard link with target inside dropbox
echo "hard link test" > ~/Dropbox/hardlinkToDropbox.txt
ln ~/Dropbox/hardlinkToDropbox.txt ~/hardlinkToDropbox.txt
echo "edit target" >> ~/Dropbox/hardlinkToDropbox.txt 
echo "edit linked file" >> ~/hardlinkToDropbox.txt 
cat ~/hardlinkToDropbox.txt 
cat ~/Dropbox/hardlinkToDropbox.txt 
# hard link with target inside dropbox
echo "hard link test" > ~/hardlinkFromDropbox.txt
ln ~/hardlinkFromDropbox.txt  ~/Dropbox/hardlinkFromDropbox.txt
echo "edit linked file" >> ~/Dropbox/hardlinkFromDropbox.txt 
echo "edit target" >> ~/hardlinkFromDropbox.txt 
cat ~/Dropbox/hardlinkFromDropbox.txt 
cat ~/hardlinkFromDropbox.txt 
#all of that works fine.  
#But now open all of those files from your dropbox folder on another computer and edit them
#Your dropbox will sync, your local versions of all those files will be updated, but NONE OF THE LINKED FILES WILL UPDATE
#The hard links are replaced and the old versions copied as "conflicted copies"
#The symlink where the dropbox file was the link is unlinked

#the symlink where the dropbox file is the original is the only one that works

答案2

事实证明这个答案是错误的,请参阅 Andrew 的帖子以了解正确答案。

是的。

我已经使用标准免费 Dropbox 帐户对 btrfs 卷中的 Dropbox 文件夹进行了测试。

测试内容是:

ln /media/username/volume/Documents/testfile /media/username/volume/Dropbox/testfile
ls -li /media/username/volume/Documents/testfile
ls -li /media/username/volume/Dropbox/testfile

命令中的第一个数字ls -li显示 inode 编号,权限和用户名之间的数字是链接计数器(显示文件有多少个硬链接)。

运行 ln 命令后,dropbox 尝试图标立即显示活动,并有效上传测试文件。

我还测试过在 Dropbox 文件夹内创建第二个硬链接,并且它也上传了文件,但我不确定它是否知道只有一个。

我的测试文件是一个 18KB 的小 .ods 文件,但它也应该可以处理更大的文件。

关于硬链接和 inode:

当您创建文件的硬链接时,您只是在另一个文件夹中为其赋予了第二个名称(如果愿意,也可以是相同的名称)。

这些文件实际上并非放置在文件夹中,而是放置在由 i 节点标识的硬盘上(取决于文件系统类型)。

那么文件夹是什么?

文件夹只是列表,也由 i 节点标识,其中包含文件和“其中”其他文件夹的名称。此列表中的每个元素都指向其对应的 i 节点。

因此,如果您创建硬链接,则它们都指向同一个 i 节点,因此它们都只是文件(同一个)。

请注意,有些应用程序拒绝处理具有硬链接的文件。其他应用程序可能会意外或故意破坏硬链接,从而将一个具有 2 个名称的文件变成两个各具有一个名称的文件。

维基百科为我们提供更多信息:

https://en.wikipedia.org/wiki/Hard_link

https://en.wikipedia.org/wiki/Inode

要创建硬链接,您可以使用ln命令行工具,您可以像这样使用它:

ln TARGET LINK_NAME

其中 target 是现有文件,link_name 是文件的新名称。完成后,您可以检查ls -li文件的 i-node 编号,并查看两个链接是否具有相同的编号。

这是手册页:http://linux.die.net/man/1/ln

相关内容