Wir haben ein Dateisystem: /foo
Und wir haben ein weiteres Dateisystem: /bar
Q:Wie kann ich alle Dateien von /foo nach /bar kopieren?
Wir haben keinen Platz, um sie zu komprimieren, sondern nur, um sie zu kopieren. Aber es könnten Symlinks und Hardlinks im Dateisystem vorhanden sein. Diese und der Besitzer, die Berechtigungen, die Struktur und die versteckten Dateien müssen also erhalten bleiben! Was ist der beste Weg?
extra: Dateien mit seltsamen Zeichen oder Block-/Zeichendateien
AKTUALISIEREN: Können wir hier gzip verwenden? Wenn über das Netzwerk kopiert werden muss, wäre Komprimierung sehr, sehr nützlich.
Antwort1
Ruis Kommentarist fast ausreichend; dies sollte alles kopieren, einschließlich versteckter Dateien:
cd /foo; tar cpf - . | (cd /bar; tar xpvf -)
(Rennen wie root
).
Wenn Sie die zwischen den beiden Prozessen kopierten Daten komprimieren möchten tar
, können Sie der Pipeline einen Kompressor und einen Dekompressor hinzufügen:
cd /foo; tar cpf - . | gzip -9 | (cd /bar; gunzip | tar xpvf -)
Wenn Ihre Version tar
dies unterstützt, können Sie z
stattdessen das Flag verwenden:
cd /foo; tar cpzf - . | (cd /bar; tar xpzvf -)
(Auf einigen Plattformen ist das -p
Flag standardmäßig aktiviert root
, bei AIX bin ich mir nicht sicher.)
Antwort2
Tar ist zwar sehr vielseitig, kennt aber viele grundlegende Probleme im Zusammenhang mit Inode-Daten nicht. Ich empfehle dringend eine Variante von
cd $src; find . | backup -if - | (cd $target; restore -xqf -)
Vor Jahren habe ich daraus ein „hübsches Skript“ gemacht – aber hauptsächlich verwende ich das Obige einfach auf der Befehlszeile.
Ein hübsches Skript (von 2009! Igitt!) finden Sie unter:http://www.rootvg.net/content/view/301/309/