Un dossier ayant deux emplacements différents sur Ubuntu 18.04

10

Je veux avoir le même dossier à deux endroits différents dans mon Ubuntu. Si je mets à jour quelque chose dans l'un, il devrait également être mis à jour dans l'autre emplacement.

Comment puis-je y arriver?

Aman Pandey
la source
8
ces 2 emplacements doivent-ils être physiques (comme dans 2x occupant de l'espace) ou peuvent-ils être des liens?
Rinzwind
19
A symbolic linkest la solution la plus simple à vos besoins et ne dépend pas des privilèges de superutilisateur. man lnpour plus d'informations.
doneal24

Réponses:

16

Utilisez des montures de liaison .

Supposons que vous ayez un répertoire existant /home/pandey/originalet que vous voulez miroir à de /home/pandey/mirrorsorte que tout ce que vous faites dans l' un d'eux est automatiquement fait dans l'autre aussi bien.

Cela ne nécessite aucune synchronisation ou copie entre les deux répertoires. Un montage de liaison est juste une autre vue du répertoire d'origine et ce qui se passe dans l'un se produit également dans l'autre.

  1. Créez (en tant qu'utilisateur) le nouveau répertoire /home/pandey/mirror:

    mkdir /home/pandey/mirror
    
  2. liez-montez le répertoire d'origine au chemin nouvellement créé. Cela nécessite un accès root:

    sudo mount --bind /home/pandey/original /home/pandey/mirror
    
  3. Prendre plaisir.

Pour annuler cela, simplement

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

Voir aussi cette question et son auto-réponse exceptionnelle sur stackexchange à propos des fixations .

PerlDuck
la source
3
+1, c'est sûr que ce chemin est plus rapide que celui que j'ai proposé;
Codito ergo sum
13
Aurait cd /home/pandey; ln -s original mirrorle même effet et n'exigerait pas de droits sudo?
doneal24
19
Oui, je me demande pourquoi les gens proposent ces solutions de rond-point alors que cela ressemble à un cas d'utilisation classique pour un simple lien sym. Quel est l'avantage? Pour autant que je puisse voir, aucun des avantages énumérés dans la question référencée ne semble s'appliquer ici.
Voo
5
@ doneal24 Je suis d'accord: la liaison symbolique a le même effet d'un point de vue pratique et ne nécessite pas de modifications fondamentales du système ni de privilèges d'administrateur.
vanadium
2
La question liée sur les montages de liaison a une belle liste de cas d'utilisation possibles. Le simple fait d'avoir besoin d'un autre chemin nommé vers un répertoire n'en fait pas partie.
Dubu
44

Comme indiqué dans les commentaires, mais pas comme une réponse appropriée:

Dans de nombreux cas, un lien symbolique est la solution la plus simple.

Vous pouvez les créer facilement sur la ligne de commande (en utilisant la lncommande avec -sparamètre). Vous pouvez également les créer facilement à l'aide d'une interface graphique: la plupart des navigateurs de fichiers (nautilus, ...) vous permettent de créer un lien symbolique par glisser-déposer (comme pour déplacer un fichier) tout en maintenant enfoncée une touche de modification (CTRL + MAJ).

Exemple d'utilisation de la ligne de commande:

$ 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
mnagel
la source
2

Vous pouvez le faire en définissant un travail crontab:

  • Ouvrez votre terminal et saisissez crontab -e
  • Appuyez isur pour activer le mode d'insertion de votre éditeur vim.

Vous pouvez y entrer la commande que vous souhaitez effectuer, afin de pouvoir copier tous les fichiers du dossier dans un autre dossier. Par exemple, si vous souhaitez copier tous les fichiers /home/user/folder_namepour /home/user/publicvous devez insérer cette commande dans votre crontabfichier:

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

Cela copiera tous les fichiers dans l'intervalle souhaité. Si vous souhaitez copier tous les fichiers à 21h30 tous les jours, votre modification doit être:

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

Pour plus d' informations sur crontab regarder ici ou à l' utilisation man crontab.

Codito ergo sum
la source
J'utiliserais probablement des montures de liaison comme @PerlDuck, étant donné que c'est un moyen facile et maintenable de le faire. Je n'utiliserais pas de cronjobs car cela pourrait entraîner toutes sortes de problèmes de performances sur votre machine si vous finissez par synchroniser un dossier dans plusieurs emplacements et que les fichiers du premier dossier sont très volumineux ou nombreux. Mon entreprise utilise cette approche pour émuler le comportement de Dropbox / Drive et maintenant que nous avons atteint un grand nombre de fichiers, dont certains ont une taille de Go, la solution ne se modifie tout simplement plus.
inamovible
2
Ce sont deux répertoires, pas un.
rage