Ein Ordner mit zwei verschiedenen Speicherorten unter Ubuntu 18.04

10

Ich möchte denselben Ordner an zwei verschiedenen Orten in meinem Ubuntu haben. Wenn ich etwas in einem aktualisiere, sollte es auch am anderen Speicherort aktualisiert werden.

Wie kann ich das erreichen?

Aman Pandey
quelle
8
Müssen diese beiden Standorte physisch sein (wie bei 2x Platzbedarf) oder können sie Links sein?
Rinzwind
19
A symbolic linkist die einfachste Lösung für Ihre Anforderung und hängt nicht von Superuser-Berechtigungen ab. man lnfür mehr Informationen.
Doneal24

Antworten:

16

Verwenden Sie Bindungshalterungen .

Angenommen, Sie haben ein vorhandenes Verzeichnis /home/pandey/originalund möchten es spiegeln , /home/pandey/mirrorsodass alles, was Sie in einem der beiden Verzeichnisse tun, automatisch auch im anderen Verzeichnis ausgeführt wird .

Dies erfordert kein Synchronisieren oder Kopieren zwischen den beiden Verzeichnissen. Ein Bind-Mount ist nur eine weitere Ansicht des ursprünglichen Verzeichnisses, und was in einem passiert, passiert auch im anderen.

  1. Erstellen Sie (als Ihr Benutzer) das neue Verzeichnis /home/pandey/mirror:

    mkdir /home/pandey/mirror
    
  2. Binden Sie das ursprüngliche Verzeichnis an den neu erstellten Pfad. Dies erfordert Root-Zugriff:

    sudo mount --bind /home/pandey/original /home/pandey/mirror
    
  3. Genießen.

Um dies einfach rückgängig zu machen

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

Siehe auch diese Frage und ihre hervorragende Selbstantwort beim Stapelaustausch über Bind-Mounts .

PerlDuck
quelle
3
+1, Sicher ist dieser Weg schneller als der von mir vorgeschlagene;
Codito Ergo Summe
13
Hätte cd /home/pandey; ln -s original mirrorden gleichen Effekt und würde keine Sudo-Rechte erfordern?
Doneal24
19
Ja, ich frage mich, warum die Leute diese Kreisverkehrslösungen vorschlagen, während dies wie ein klassischer Anwendungsfall für einen einfachen Sym-Link klingt. Was ist der Vorteil? Soweit ich sehen kann, scheint hier keiner der in der genannten Frage aufgeführten Vorteile zuzutreffen.
Voo
5
@ doneal24 Ich stimme zu: Symbolisches Verknüpfen hat aus praktischer Sicht den gleichen Effekt und erfordert keine grundlegenden Systemänderungen und Administratorrechte.
Vanadium
2
Die verknüpfte Frage zu Bindungsmontagen enthält eine schöne Liste möglicher Anwendungsfälle. Nur einen anderen benannten Pfad zu einem Verzeichnis zu benötigen, gehört nicht dazu.
Dubu
44

Wie in den Kommentaren ausgeführt, aber nicht als richtige Antwort:

In vielen Fällen ist eine symbolische Verknüpfung die einfachste Lösung.

Sie können sie einfach in der Befehlszeile erstellen (mit dem lnBefehl mit -sParameter). Sie können sie auch einfach über eine GUI erstellen: In den meisten Dateibrowsern (nautilus, ...) können Sie einen symbolischen Link per Drag & Drop (wie beim Verschieben einer Datei) erstellen, während Sie eine Modifizierertaste (STRG + UMSCHALTTASTE) gedrückt halten.

Beispiel für die Verwendung der Befehlszeile:

$ 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
quelle
2

Sie können dies tun, indem Sie einen Crontab-Job festlegen:

  • Öffnen Sie Ihr Terminal und geben Sie ein crontab -e
  • Drücken Sie i, um den Einfügemodus Ihres VIM-Editors zu aktivieren.

Sie können dort den Befehl eingeben, den Sie ausführen möchten, um alle Dateien des Ordners in einen anderen Ordner zu kopieren. Zum Beispiel, wenn Sie alle Dateien kopieren in /home/user/folder_namezu /home/user/publicdiesem Befehl in Ihrer einfügen sollst crontabDatei:

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

Dadurch werden alle Dateien im gewünschten Intervall kopiert. Wenn Sie jeden Tag um 21:30 Uhr alle Dateien kopieren möchten, sollten Sie Folgendes bearbeiten:

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

Weitere Informationen über die crontab Blick hier oder Verwendung man crontab.

Codito ergo Summe
quelle
Ich würde wahrscheinlich Bindungs-Mounts als @PerlDuck verwenden, da dies eine einfache und wartbare Möglichkeit ist, dies zu tun. Ich würde keine Cronjobs verwenden, da dies zu Leistungsproblemen auf Ihrem Computer führen kann, wenn Sie einen Ordner an mehreren Speicherorten synchronisieren und die Dateien im ersten Ordner sehr groß oder zahlreich sind. Mein Unternehmen verwendet diesen Ansatz, um das Dropbox / Drive-Verhalten zu emulieren. Nachdem wir nun eine große Anzahl von Dateien erreicht haben, von denen einige GB-Größen haben, lässt sich die Lösung einfach nicht mehr skalieren.
am
2
Dies sind zwei Verzeichnisse, nicht eines.
Wut