Rsync kopiert das aktuelle Verzeichnis mit dem Namen

8

Ich möchte das aktuelle Verzeichnis in mein Sicherungsverzeichnis kopieren:

Ich habe diesen Befehl ausprobiert, rsync -a . ~/backup/aber er kopiert nur den aktuellen Verzeichnisinhalt, anstatt am Ziel ein neues Verzeichnis zu erstellen.

Ich weiß, dass das Erstellen eines neuen Verzeichnisses am Zielende erreicht werden kann, indem der nachfolgende Schrägstrich im Quellpfad vermieden wird. In meinem Fall funktioniert dies jedoch nicht, da ich anstelle des Verzeichnisnamens einen Punkt (".") Verwende.

Ich möchte, dass rsync ein neues Verzeichnis im Zielpfad mit dem gleichen Namen wie das aktuelle Verzeichnis erstellt. Wie kann ich das erreichen?

BAB
quelle

Antworten:

5

Ich mag Ihr Skript, aber bei Bedarf können Sie es über die Befehlszeile direkt aus dem aktuellen Verzeichnis ausführen:

rsync -a "$PWD" ~/backup/

oder auf ähnliche Weise wie bei Ihrem Skriptansatz mit

rsync -a "$(pwd -P)" ~/backup/

Anmerkungen:

  • Es ist erforderlich, das aktuelle Verzeichnis in Anführungszeichen zu setzen, wenn im Pfad beispielsweise ein oder mehrere Leerzeichen vorhanden sind.

  • Bei symbolischen Verknüpfungen im Pfad ist es möglich, den physischen Pfad zu erhalten, indem alle Symlinks vermieden werden, die die Option -Pim pwdBefehl invocation ( $(pwd -P)) angeben , oder die ausführbare Datei mit ihrem vollständigen Pfad ( $(/bin/pwd)) aufgerufen wird .
    In der Tat gibt es die integrierte Funktion pwd , die standardmäßig den verknüpften Pfad anzeigt , und die ausführbare Datei /bin/pwd, die standardmäßig den physischen Pfad anzeigt .

  • Beide Befehle beziehen sich auf die Variable $PWD, die das aktuelle Arbeitsverzeichnis enthält, wenn sie nach der Version des Pfads mit den eventuellen Symlinks gefragt werden. Wenn Sie also den physischen Pfad nicht unbedingt benötigen , können Sie vermeiden, die Subshell aufzurufen und direkt die zu verwenden variabel $PWD.

    rsync -a "$PWD" ~/backup/
    
Hastur
quelle
Das ist bessere Lösung ..! Eigentlich wollte ich nur einen Alias ​​wie ("backupme") erstellen, damit ich mit diesem Befehl problemlos ein Backup des aktuellen Verzeichnisses erstellen kann. Dieser Befehl ist sehr nützlich und jetzt werde ich dieses Skript entfernen und stattdessen dieses verwenden. Vielen Dank..!
BAB
Dieser Befehl funktioniert! Wenn ich jedoch einen Alias ​​erstelle und diesen Alias ​​ausführe, wird nur die Sicherung meines Home-Verzeichnisses anstelle des aktuellen Verzeichnisses durchgeführt.
BAB
1
Versuchen Sie, ein einfaches Anführungszeichen 'in der Alias-Definition zu verwenden:alias BACKUPNOW='rsync -a $(pwd) ~/backup/'
Hastur
Beispiele sind oft besser als Worte . Es ist nicht in Aliasing, es ist in Bash. ;) Bis Sie neugierig sind, verwenden Sie man bash(oder einen anderen Befehl) help aliasin man bashgroßem Umfang oder wenn der Befehl ein integrierter Befehl ist ... Ok, ist zunächst eine breite Ausgabe ... aber im Allgemeinen können Sie dies tun.
Hastur
1
@NavidHt Danke für den Spot. Aktualisiert. Beachten Sie, dass Sie mit der Variablen PWD , "$PWD".
Hastur
2

Eine Lösung gefunden:

Erstellt ein neues Shell-Skript wie folgt:

current_dir=`pwd`
dir_name=`basename $current_dir`
rsync -a . ~/backup/$dir_name

Wenn Sie dies ausführen, wird am Zielort ein neues Verzeichnis erstellt und der aktuelle Ordnerinhalt kopiert.

BAB
quelle
Klares und verständliches Skript. Normalerweise finden Sie den Vorschlag, das syntax current_dir=$(pwd)anstelle von current_dir=`pwd`aus Kompatibilitätsgründen zu verwenden, auch wenn sie dieselbe Aktion ausführen.
Hastur