Wie kopiere ich Ordner mit Dateien in einen anderen Ordner unter Unix / Linux? [geschlossen]
1191
Ich habe einige Probleme beim Kopieren eines Ordners mit Dateien in diesem Ordner in einen anderen Ordner. Der Befehl cp -rkopiert keine Dateien in den Ordner.
Ich frage mich, warum dieser genaue Befehl in Dockerfile alle Quellverzeichnisdateien in das Ziel kopiert, anstatt nur das gesamte Verzeichnis zu kopieren.
Holms
4
Ich glaube, das '/' am Ende macht einen Unterschied und das könnte für Ihre Erfahrung verantwortlich sein. Wenn die Quelle den abschließenden Schrägstrich enthält, wird nur das kopiert, was sich im Verzeichnis befindet. Wenn der abschließende Schrägstrich nicht enthalten ist, wird auch das Verzeichnis und anschließend der Inhalt kopiert. Mein Gedächtnis ist, dass dieses Verhalten je nach Befehl und möglicherweise Ereignis nach Betriebssystem etwas variiert. Hier ist eine Referenz mit weiteren Informationen.
OllieBrown
23
Ich würde sagen, wenn Sie die Quelle nicht einschließen möchten und sicherstellen möchten, dass alles kopiert wird (Symlinks, versteckte Dateien), ohne den übergeordneten Quellordner zu kopieren, verwenden Sie -ra source /. Ziel. Dadurch wird sichergestellt, dass der Inhalt des Ordners kopiert wird, nicht jedoch der übergeordnete Ordner selbst, was manchmal praktisch ist. Und der Unterschied ist das /.
Muni764
Dies scheint auch richtig zu funktionieren, wenn es sich bei den zu kopierenden Verzeichnissen um symbolische Links handelt, was mein Anwendungsfall war.
Gdalya
3
Beachten Sie die Bedeutung von "Schrägstrich" in Ihrer Quelle, da cp -r src/. destich weiß, dass es erwähnt wird, aber ich scheine es jedes Mal zu vermissen.
Bbeecher
368
Sie suchen nach dem cpBefehl. Sie müssen die Verzeichnisse so ändern, dass Sie sich außerhalb des Verzeichnisses befinden, das Sie kopieren möchten.
Wenn das Verzeichnis, das Sie kopieren, aufgerufen wird dir1und Sie es in Ihren /home/PicturesOrdner kopieren möchten :
cp -r dir1/ ~/Pictures/
Linux unterscheidet zwischen Groß- und Kleinschreibung und muss /nach jedem Verzeichnis wissen, dass es sich nicht um eine Datei handelt. ~ist ein Sonderzeichen im Terminal, das automatisch im Ausgangsverzeichnis des aktuellen Benutzers ausgewertet wird. Wenn Sie wissen müssen, in welchem Verzeichnis Sie sich befinden, verwenden Sie den Befehl pwd.
Wenn Sie nicht wissen, wie ein Linux-Befehl verwendet wird, gibt es eine Handbuchseite, auf die Sie durch Eingabe von: verweisen können:
man [insert command here]
an einer Terminal-Eingabeaufforderung.
Um lange Dateipfade beim Eingeben in das Terminal automatisch zu vervollständigen, können TabSie drücken, nachdem Sie mit dem Eingeben des Pfads begonnen haben. Entweder werden Ihnen Auswahlmöglichkeiten angezeigt, oder der verbleibende Teil des Pfads wird eingefügt.
Zur weiteren Verdeutlichung werden mit dieser -rOption Verzeichnisse rekursiv kopiert.
TVann
5
Haben gibt die OP nicht , dass er wurde unter Verwendung des cp -rBefehls, aber das war es nicht richtig funktioniert?
MD XF
4
Der Grund, warum ich die Informationen zu Manpages hinzugefügt habe, ist, dass diese Flags verteilungsabhängig sein können. Jedoch zum größten Teil, wie es scheint -r, --recursiveund -Rist gleichwertig. Es wird auch häufige Fallstricke usw. geben, was schön ist.
Alex W
6
Wenn Sie das VERZEICHNIS und nicht nur den Inhalt portabel kopieren möchten, lassen Sie den abschließenden Bindestrich im Quellordner weg. cp -r dir1 ~/Pictures/
Antworten:
Die Option, die Sie suchen, ist
-R
.destination
nicht vorhanden, wird es erstellt.-R
bedeutetcopy directories recursively
. Sie können auch verwenden,-r
da die Groß- und Kleinschreibung nicht berücksichtigt wird./
gemäß dem Kommentar von @ muni764 .quelle
cp -r src/. dest
ich weiß, dass es erwähnt wird, aber ich scheine es jedes Mal zu vermissen.Sie suchen nach dem
cp
Befehl. Sie müssen die Verzeichnisse so ändern, dass Sie sich außerhalb des Verzeichnisses befinden, das Sie kopieren möchten.Wenn das Verzeichnis, das Sie kopieren, aufgerufen wird
dir1
und Sie es in Ihren/home/Pictures
Ordner kopieren möchten :Linux unterscheidet zwischen Groß- und Kleinschreibung und muss
/
nach jedem Verzeichnis wissen, dass es sich nicht um eine Datei handelt.~
ist ein Sonderzeichen im Terminal, das automatisch im Ausgangsverzeichnis des aktuellen Benutzers ausgewertet wird. Wenn Sie wissen müssen, in welchem Verzeichnis Sie sich befinden, verwenden Sie den Befehlpwd
.Wenn Sie nicht wissen, wie ein Linux-Befehl verwendet wird, gibt es eine Handbuchseite, auf die Sie durch Eingabe von: verweisen können:
an einer Terminal-Eingabeaufforderung.
Um lange Dateipfade beim Eingeben in das Terminal automatisch zu vervollständigen, können TabSie drücken, nachdem Sie mit dem Eingeben des Pfads begonnen haben. Entweder werden Ihnen Auswahlmöglichkeiten angezeigt, oder der verbleibende Teil des Pfads wird eingefügt.
quelle
-r
Option Verzeichnisse rekursiv kopiert.cp -r
Befehls, aber das war es nicht richtig funktioniert?-r
,--recursive
und-R
ist gleichwertig. Es wird auch häufige Fallstricke usw. geben, was schön ist.cp -r dir1 ~/Pictures/
Verwenden:
quelle
demo1_copy
existierte noch nicht$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/