Wie kopieren Sie ein Verzeichnis und seinen Inhalt unter einem neuen Verzeichnisnamen an einen neuen Speicherort?

52

Ich bin neu in der Linux-Kommandozeile und versuche gerade, den Kopierbefehl in den Griff zu bekommen.

Kann mir jemand sagen, ob es möglich ist, ein Verzeichnis mit seinen Unterverzeichnissen und zugehörigen Dateien in ein neues Verzeichnis mit einem neuen Namen zu kopieren, z. B. directory_backup?

Vielen Dank für jede Hilfe im Voraus

Edmuntu
quelle

Antworten:

69

Sie verwenden -r(rekursiv kopieren) und geben den neuen Namen an

cp -r /path/to/directory /path/to/location/new-name

Ersetzen Sie durch die tatsächlichen Pfade ..., um beispielsweise stuffvon meinem Ausgangsverzeichnis in ein vorhandenes Verzeichnis zu kopieren backupund das neue Verzeichnis zu benennen stuff-backup(falls dieses Verzeichnis bereits vorhanden ist, beachten Sie, dass stuffes in dieses Verzeichnis kopiert und nicht überschrieben wird).

cp -r ~/stuff ~/backup/stuff-backup

~ist eine Verknüpfung für Ihr Home-Verzeichnis /home/$USERoder /home/zannain meinem Fall. Sie können es weglassen, wenn das aktuelle Arbeitsverzeichnis Ihr Ausgangsverzeichnis ist. Dies können Sie an Ihrer Eingabeaufforderung sehen

zanna@monster:~$
              ^--the ~ here is where I am - home!

Sie können das -vVerbose-Flag hinzufügen , um cpjeden durchgeführten Kopiervorgang zu melden ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Zanna
quelle
Entschuldigung Zanna. Ich werde Ihren Rat in die Praxis umsetzen und sehen, wie ich gehe. Wie die Idee der ausführlichen Flagge. Angenommen, dies funktioniert auch als Bericht, während andere Befehle ausgeführt werden. Prost.
Edmuntu
@ Edmuntu Entschuldigung für was? Ja, viele Befehle haben ein -voder --verboseflag :)
Zanna
Entschuldigung für die anfängliche kurze "Danke" .... drücken Sie die Eingabetaste zu Unrecht.
Edmuntu
10

Der Befehl, den Sie brauchen, ist einfach, cpwas für "Kopieren" steht.

Sie können es beispielsweise mit einer der folgenden Syntaxen verwenden:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

Mit der ersten Variante können Sie einen neuen Dateinamen für die Zieldatei angeben, während mit der zweiten Variante eine gleichnamige Kopie im Zielverzeichnis erstellt wird. Sie müssen natürlich zuerst die Platzhalter in Großbuchstaben durch gültige Pfade ersetzen.

Allerdings cparbeitet standardmäßig Dateien auf, nicht nur auf Verzeichnisse. Um ein vollständiges Verzeichnis mit seinem gesamten Inhalt rekursiv zu kopieren, müssen Sie die folgende -rOption hinzufügen :

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Sie können mehr über den cpBefehl erfahren, indem Sie man cpIhr Terminal eingeben .

Byte Commander
quelle
Nicht an diesen Kommentarbereich gewöhnt Byte Commander ... drücken Sie weiter, um die Zeile zu ändern, sondern posten Sie stattdessen. Sehr klare Gliederung in Ihrer Antwort. Ich freue mich darauf, diese Verzeichnisse zu sortieren, nachdem ich eine gute Anleitung zur korrekten Verwendung der verfügbaren Tools erhalten habe. Ausgezeichnet.
Edmuntu
@Edmuntu Verwenden Sie in Zukunft beim Kommentieren die Tastenkombination UMSCHALT + EINGABETASTE, um eine Zeile nach unten zu verschieben.
TheOdd
@OwenHines Nur dass Kommentare Zeilenumbrüche und zusätzliche Leerzeichen entfernen und sie im Editor haben, ändert nichts am Ergebnis.
Byte Commander
@ByteCommander Ach ja, egal. Nun, jetzt weiß er es.
TheOdd
6

Alternativ zum allgemein nützlichen Befehl cp können Sie rsync verwenden, das den zusätzlichen Vorteil hat, die Berechtigungen / Zeitstempel der ursprünglichen Verzeichnisstruktur zu replizieren:

rsync -av dir/ newdir

-a Archiv -v ausführlich

Beachten Sie den Schrägstrich nach dem Quellverzeichnis.

slowko
quelle
5

Ich finde es einfacher, in das Verzeichnis zu wechseln, aus dem ich zuerst kopiere. In diesem Beispiel wechseln Sie in ein Verzeichnis, das alle aufgerufen haben /boot. Jeder kann die folgenden Befehle kopieren und in sein Terminal einfügen.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Für den cpBefehl wird das aktuelle Verzeichnis als .das Verzeichnis identifiziert, in das /bootwir gewechselt haben. Die -rOption macht es rekursiv, alle Unterverzeichnisse einzuschließen.

Um sicherzustellen, dass es funktioniert, führen Sie in diesem Fall dualle Unterverzeichnisse und Gesamtdateigrößen im neuen Verzeichnis /boot_backupauf.

Verwenden Sie nach Abschluss dieser Anleitung:, sudo rm -r /boot_backupum das neue Verzeichnis und seine Unterverzeichnisse zu entfernen.

WinEunuuchs2Unix
quelle
1
Während dies erklärt, wie alle Dateien von Ihrem aktuellen Verzeichnis in ein anderes Verzeichnis kopiert werden, beantwortet es die OPs-Frage, wie ein Verzeichnis (und sein Inhalt) in ein anderes Namensverzeichnis kopiert werden soll, nicht vollständig. Es gibt kürzere Befehle (wie cp -r), die dafür sorgen, dass ein neues Verzeichnis erstellt und alle Dateien in dieses kopiert werden
BlueCacti
1
Es erklärt, wie man kopiert und dir und seine Inhalte - der Unterschied ist, dass es vorsorglich zuerst in das Quellverzeichnis wechselt. cp -rwie du empfiehlst steht schon in der dritten befehlszeile. Das Tutorial basiert auf der Tatsache, dass jeder ein /bootVerzeichnis hat und dies auf seinem eigenen Computer ausprobieren kann. Hätte ich verwendet cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backup, könnten Leser nicht kopieren und in ihr Terminal einfügen - sie müssten Änderungen GroundZerovornehmen, die mehr Arbeit und Fehlerquellen schaffen. Ich hoffe, Sie schätzen das KISS dieser Antwort mit einem eingebetteten Tutorial.
WinEunuuchs2Unix
1
Wenn Sie mit @GroundZero a cd ~/Documents/SomeObsucreFolder/2016/Nov/das aktuelle Verzeichnis als Quellverzeichnis festlegen, wird die Terminal-Eingabeaufforderung geändert, um sicherzustellen, dass es richtig geschrieben ist. cp -r .Wenn Sie es dann als Quelle verwenden, müssen Sie das Quellverzeichnis nicht erneut eingeben. Es ist einfach das, was ich für eine gute Angewohnheit halte. Zusätzlich einmal Quellverzeichnis zu ändern ist es einfach zu tun ls FIleName1, ls FileName2etc. Dateien , die Sie sichern möchten esnure gibt es , ohne das Quellverzeichnis Namen für das wiederholen lsBefehl.
WinEunuuchs2Unix
5

Sie können den folgenden Befehl verwenden, um das Verzeichnis von einem Ort in ein anderes Unterverzeichnis zu kopieren.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Erklärung des Befehls:

  • -R = Verzeichnisse rekursiv kopieren
  • v = erklären, was getan wird
  • p = Es wird Ihnen helfen, Ihre Erlaubnis und Ihr Eigentum mit Zeitstempeln zu bewahren
Rakesh C
quelle
Vielen Dank @ Rakesh Chauhan. "Bewahren Sie Ihre Erlaubnis und Ihr Eigentum mit Zeitstempeln" ??? Wow .... ich muss es schaffen !!!! Noch ein weiterer Aspekt von Zeilenbefehlen, der untersucht werden muss. Danke für Ihre Antwort.
Edmuntu
4

cpist der Befehl, der die gesuchte Funktion ausführt. Es steht für Kopie und es macht genau das. Der Befehl, der in dieser Situation für Sie funktionieren würde, lautet

cp -R source/ destination/

Dies würde den source/Ordner und alle seine Unterverzeichnisse in kopieren destination/.

Wenn destination/nicht vorhanden, wird es erstellt.

Das -RFlag steht für rekursiv und weist cpan, alle Unterverzeichnisse zu kopieren.

Die ungeraden
quelle
Vielen Dank, dass Sie @ Owen Hines. Klingt so, ist definitiv der Befehl für meine Aufgabe. Cheers
Edmuntu
1
@Edmuntu Ich bin froh, dass ich Ihnen helfen kann. Wenn Sie eine Lösung für Ihr Problem gefunden haben, können Sie die für Sie richtige Antwort markieren, indem Sie auf das Häkchen darunter klicken. Auf diese Weise können andere Personen benachrichtigt werden, die die Seite der zu lösenden Frage anzeigen.
TheOdd
1

Sie möchten im Allgemeinen die Dateiberechtigungen beim Erstellen einer Kopie beibehalten, nicht die neuen Standarderstellungsberechtigungen. Dies bedeutet, dass Sie -a flag für cp verwenden.

cp -a file filenew
Robi
quelle