Was bedeutet "cp: Verzeichnis weglassen"?


408

Ich habe den folgenden Befehl ausgegeben:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Wenn ich das mache, bekomme ich die folgenden Meldungen:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

und so weiter...

Warum erhalte ich diese Nachrichten?

Antworten:


536

Kopiert standardmäßig cpnur die direkten Dateien und keine Unterverzeichnisse im Verzeichnis. Die Meldung cp: omitting directory 'directory'warnt Sie, dass das angegebene Verzeichnis nicht kopiert wurde.

Geben Sie dazu die Option -r(oder --recursive) an:

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Die Manualpage (Befehl:) man cpenthält eine Übersicht der verfügbaren Optionen.


2
Danke vielmals. Ich dachte, dass * sich irgendwie rekursiv damit befassen wird. Aber nein. : D Nochmals vielen Dank. :)
MEM

11
@MEM: das *wird von Bash erweitert, nicht von cp. Testen Sie es selbst, indem Sie sich echo Ihrem Befehl stellen. Wenn es erweitert wird, ordnet es alles einem vorhergehenden zu ...library/Zend/(die Dateien und Verzeichnisse darin).
Lekensteyn

Eine gute Nachricht ist, omitting directory 'directory'dass das Verzeichnis nicht gelöscht wird.
Bishwas Mishra

@Lekensteyn Ich habe versucht, Inhalte von einem Benutzer auf einen anderen zu kopieren. Also habe ich die Erlaubnis vom Benutzer erhalten, chmod a+rx ~/nachdem ich versucht habe, mit cp /home/2110/* /home/2111/ihm zu kopieren . wo ich mich geirrt habe Es tut mir leid, einen Kommentar abzugeben, da ich keine doppelten Fragen stellen kann. Ich hoffe auf schnelle Antwort :)
Jasinth Premkumar

@jasinthpremkumar Dateien in /home/2110gehören dem Benutzer 2110, während Dateien in dem Benutzer 2111 /home/2111gehören sollen. Verwenden Sie zum Festlegen des Eigentümers so etwas wie sudo chown -R 2111 /home/2111.
Lekensteyn

40

Die Meldung bedeutet, dass cpdie aufgelisteten Verzeichnisse nicht kopiert wurden. Dies ist das Standardverhalten für cp- Nur Dateien werden normal kopiert, unabhängig davon, ob Sie sie explizit angeben oder verwenden *. Wenn Sie Verzeichnisse kopieren möchten, verwenden Sie den -rSchalter, der "rekursiv" bedeutet.


16

Einige Dinge, die hier überprüft werden müssen:

  1. Nicht verwenden sudo. Sie brauchen es nicht, Sie haben bereits die Berechtigung, Inhalte in Ihr eigenes Home-Verzeichnis zu schreiben.

  2. Sie können versteckte Dateien und Verzeichnisse im grafischen Dateimanager einfach anzeigen, indem Sie im Menü die Option "Versteckte Dateien anzeigen" auswählen. Oder durch Drücken von Ctrl- H.

  3. Sie müssen die -ROption im cpBefehl verwenden, um ein Verzeichnis und seinen Inhalt zu kopieren.

  4. / home ist nicht Ihr Home-Verzeichnis. / home / benutzername ist. Sie versuchen also wahrscheinlich, von einer falschen Stelle zu kopieren.

  5. Die Shell unterscheidet zwischen Groß- und Kleinschreibung, also sind ~ / downloads und ~ / Downloads zwei verschiedene Dinge.


2

Wenn Sie ein Verzeichnis wie folgt kopieren:

cp dir1 copy_of_dir1

Sie kopieren nur und genau das dir1Selbst und nicht die darin enthaltenen Dateien. Am Ende erhalten Sie eine neue Verzeichnisstruktur, während die Struktur nicht vorhanden ist.

Mit anderen Worten , nachdem er es kopiert wurde , wird sagen , dass mein Inhalt ist file1, file2usw; Diese Dateien wurden jedoch nicht kopiert und existieren daher nicht darin.

Um dieses Problem zu beheben, das möglicherweise cpstandardmäßig auftritt, werden die Verzeichnisse nicht kopiert und übersprungen, es sei denn, Sie geben eine -rOption an, mit der alle Dateien auch rekursiv kopiert werden.


1

Der Grund dafür omitting directoryist cp, dass alle mir bekannten Kopierprogramme eine Liste der zu kopierenden Dateien und Unterverzeichnisse erstellen, bevor Sie mit dem Kopieren der Dateien beginnen. Wenn die --recursiveOptionen fehlen, werden Unterverzeichnisse von dieser Liste gestrichen. Das Weglassen bezieht sich daher auf das Entfernen aus der Kopierliste, nicht von Ihrem Quellmedium. Ich glaube, das spricht die Bedeutung der Botschaft an.


0

Mit dem Befehl cp werden Dateien und Verzeichnisse kopiert, nicht die verschachtelten Verzeichnisse. Wenn Sie verschachtelte Verzeichnisse kopieren möchten, können Sie danach -r hinzufügen , wobei -r rekursiv bedeutet.

Syntax, der Sie folgen können (als root ausgeführt):

cp -r /source/dir/* /destination/ 

oder

cp --recursive /source/dir/* /destination/

-1

Angenommen, Sie haben zwei Verzeichnisse 'Tag' und 'Test'

Wenn Sie das 'Tag'-Verzeichnis in das' Test'-Verzeichnis kopieren möchten, verwenden Sie den Befehl

$ : cp -r Tag Test (case sensitive)

Meistens wird das Problem mit dem obigen Code gelöst, wenn nicht, und Sie erhalten die folgende Nachricht wie

cp: omitting directory `Tag' 
cp: omitting directory `Test'

Fügen Sie dann einige Dateien im Verzeichnis 'Tag' hinzu und kopieren Sie diese in das Verzeichnis 'Test'. Eigentlich habe ich das gleiche Problem aber gelöst wie das, was ich zweitens gesagt habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.