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?

MEM
quelle

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.

Lekensteyn
quelle
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.

Roger Light
quelle
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.

Nikunj K.
quelle
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.

Ravexina
quelle
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.

endrias
quelle
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/
itsguri
quelle
-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.

jainmiah shaik
quelle