cp -r
dient zum rekursiven Kopieren von Dateien und cp -R
zum rekursiven Kopieren von Verzeichnissen. Aber ich habe geprüft, und beide scheinen beide Dateien und Verzeichnisse zu kopieren, die gleiche Sache. Was ist der Unterschied?
60
Antworten:
Während
-R
posix gut definiert ist,-r
ist nicht portabel!Unter Linux in dem GNU und BusyBox - Implementierungen
cp
,-r
und-R
sind gleichwertig.Auf der anderen Seite ist das Verhalten , wie Sie in der POSIX- Handbuchseite von nachlesen können
cp
, implementierungsdefiniert .-r
quelle
-r
die realen Dateien kopiert werden, auf die durch symbolische Links verwiesen wird, während-R
der symbolische Link kopiert wird, was meistens beabsichtigt ist.Der Unterschied besteht darin, dass einer ein kleines "R" und der andere ein großes "R" verwendet. Darüber hinaus kein Unterschied. Dasselbe gilt, wenn Sie die
--recursive
Option long verwenden.quelle
cp
gibt es tatsächlich einen Unterschied. Siehe Random832s Antwort . @Ignacio Du solltest ein Qualifikationsmerkmal in diese Antwort einfügen, das besagt "Wenncp
es sich um die moderne GNU-Implementierung handelt" oder so ähnlich.-R
nur zu verwenden, und in der Tat empfehlen einige der Manpages auf den eben erwähnten Systemen dies auch.Kleinbuchstaben
-r
waren eine ältere Option, die in 4.1BSD eingeführt wurde und alle Nicht-Verzeichnisse einfach als Dateien kopierte. Das heißt, wenn ein Gerät oder ein FIFO gefunden wird, wird es geöffnet, der Inhalt gelesen und am Ziel eine Datei mit dem Inhalt erstellt.Großbuchstaben
-R
waren eine standardisierte Option (eingeführt in BSD in 4.4BSD, obwohl frühere Versionen sie als Synonym hatten-r
), die beim Auffinden eines Geräts, eines FIFO oder einer anderen speziellen Datei eine äquivalente spezielle Datei am Zielort erzeugen würde.Viele Implementierungen behalten diese Unterscheidung noch bei, aber einige (einschließlich der für Linux typischen GNU-Version) bieten nur die
-R
Semantik-r
als Synonym an.quelle
In OS X und älteren Versionen von FreeBSD
-r
ist es wie-R -L --copy-contents
in coreutils, oder es folgt symlinks und liest den Inhalt spezieller Dateien und FIFOs.mkdir a;touch b;ln -s $PWD/b a;cp -r a c
Ersetzt den Symlink mit der Zieldatei in OS X,mkdir a;mkfifo a/b;cp -r a c
blockiert das Lesen des FIFO undmkdir a;ln -s /dev/zero a;cp -r a b
beginnt mit dem Füllenb/zero
mit Nullen.Von der
cp
Manpage in OS X und alten Versionen von FreeBSD:In neuen Versionen von FreeBSD
-r
ist äquivalent zu-RL
:http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :
quelle
Einer der Unterschiede war, dass -r keine versteckten Verzeichnisse kopiert, während -R versteckte Verzeichnisse kopiert.
Ich habe das .git-Verzeichnis im Zielverzeichnis getestet und bin zu dem obigen Ergebnis gekommen. Ich benutze derzeit centOS.
Ich kann mich irren, aber es ist offen für Diskussionen.
quelle
-r
und-R
beide kopieren versteckte Verzeichnisse