一个文件夹在Ubuntu 18.04上具有两个不同的位置


10

我想在Ubuntu的两个不同位置拥有相同的文件夹。如果我在一处进行更新,则它也应该在另一处进行更新。

我该如何实现?


8
这两个位置是否需要物理放置(例如占用空间的2倍),或者它们可以是链接?
Rinzwind

19
A symbolic link是满足您要求的最简单解决方案,并且不依赖于超级用户特权。man ln想要查询更多的信息。
dodal24 '19

Answers:


16

使用绑定挂载

假设您有一个现有目录,/home/pandey/original并希望将其镜像/home/pandey/mirror该目录,以便您在其中任何一个目录中执行的所有操作也会在另一个目录中自动完成。

这不需要在两个目录之间进行任何同步或复制。一个绑定安装只是另一种观点原来的目录,会发生什么在一个还发生在其他。

  1. 创建(作为您的用户)新目录/home/pandey/mirror

    mkdir /home/pandey/mirror
    
  2. 原始目录绑定安装到新创建的路径。这需要root访问:

    sudo mount --bind /home/pandey/original /home/pandey/mirror
    
  3. 请享用。

要撤销此操作,只需

sudo umount /home/pandey/mirror
rmdir /home/pandey/mirror

另请参阅此问题及其在关于绑定安装的stackexchange上的出色自我解答。


3
+1,可以肯定,这种方式比我建议的方式要快;
Codito ergo sum

13
cd /home/pandey; ln -s original mirror产生相同的效果并且不需要sudo权限吗?
doneal24 '19

19
是的,我想知道为什么人们提出这些回旋解决方案,而这听起来像是简单符号链接的经典用例。有什么好处?据我所知,所引用问题中列出的优点似乎都没有在这里适用。
Voo

5
@ doneal24我同意:从实际的角度来看,符号链接具有相同的效果,并且不需要基本的系统更改和管理员权限。

2
绑定安装上的链接问题列出了可能的用例。仅需要目录的另一个命名路径不是其中之一。
Dubu

44

正如评论中指出的那样,但不是正确的答案:

在许多情况下,符号链接是最简单的解决方案。

您可以在命令行上轻松创建它们(使用ln-s参数的命令)。您也可以使用GUI轻松创建它们:大多数文件浏览器(nautilus,...)允许您在按住修饰键(CTRL + SHIFT)的同时使用拖放操作(如移动文件)创建符号链接。

命令行用法示例:

$ mkdir first_dir
$ ln -s ./first_dir ./second_dir
$ ls 
first_dir  second_dir

$ touch ./first_dir/test_1
$ touch ./second_dir/test_2

$ ls ./first_dir 
test_1  test_2

$ ls ./second_dir
test_1  test_2

2

您可以通过设置crontab作业来做到这一点:

  • 打开您的终端并输入 crontab -e
  • 按下i以激活您的vim编辑器的插入模式。

您可以在此处输入要执行的命令,以便可以将该文件夹的所有文件复制到另一个文件夹中。例如,如果要将所有文件复制/home/user/folder_name到其中/home/user/public,则应在文件中插入以下命令crontab

rsync /home/user/folder_name -r /home/user/public

这将以所需间隔复制所有文件。如果您想每天21:30复制所有文件,则编辑应为:

 30 21 * * *  rsync /home/user/folder_name -r /home/user/public

有关crontab的更多信息,请在此处或使用man crontab


我可能会将绑定安装用作@PerlDuck,因为这样做是一种简单且可维护的方法。我不会使用cronjobs,因为如果最终将一个文件夹同步到多个位置并且第一个文件夹中的文件很大或很多,这可能会导致计算机上出现各种性能问题。我的公司正在使用这种方法来模拟Dropbox / Drive的行为,现在我们到达了大量文件,其中一些文件具有GB的大小,因此该解决方案根本无法再扩展。
无法命名的

2
这是两个目录,而不是一个。
愤怒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.