Während -R
ist Posix wohldefiniert, -r
ist nicht tragbar!
Unter Linux in den GNU- und BusyBox-Implementierungen von cp
, -r
und -R
sind gleichwertig.
Auf der anderen Seite, wie Sie in der POSIX-Manpage von cp
nachlesen können , -r
Verhalten ist implementierungsdefiniert .
* If neither the -R nor -r options were specified, cp shall take actions based on the type and contents of the file referenced by the symbolic link, and not by the symbolic link itself. * If the -R option was specified: * If none of the options -H, -L, nor -P were specified, it is unspecified which of -H, -L, or -P will be used as a default. * If the -H option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand. * If the -L option was specified, cp shall take actions based on the type and contents of the file referenced by any symbolic link specified as a source_file operand or any symbolic links encoun- tered during traversal of a file hierarchy. * If the -P option was specified, cp shall copy any symbolic link specified as a source_file operand and any symbolic links encoun- tered during traversal of a file hierarchy, and shall not follow any symbolic links. * If the -r option was specified, the behavior is implementation- defined.
-r
in Kleinbuchstaben war eine ältere Option, eingeführt in 4.1BSD, die einfach alle Nicht-Verzeichnisse als Dateien kopieren würde. Das heißt, wenn es auf ein Gerät oder einen FIFO stieß, würde es es öffnen, den Inhalt lesen und am Ziel eine Datei mit dem Inhalt erstellen.
-R
in Großbuchstaben war eine standardisierte Option (in BSD in 4.4BSD eingeführt, obwohl frühere Versionen sie als Synonym zu -r
hatten ), die beim Auffinden eines Geräts, FIFOs oder einer anderen speziellen Datei eine äquivalente spezielle Datei am Ziel erstellen würde.
Viele Implementierungen behalten diese Unterscheidung noch bei, aber einige (einschließlich der für Linux typischen GNU-Version) stellen nur den -R
bereit Semantik, mit -r
als Synonym.
Der Unterschied besteht darin, dass das eine ein kleines „R“ und das andere ein großes „R“ verwendet. Darüber hinaus kein Unterschied. Dasselbe gilt, wenn Sie den --recursive
verwenden lange Option.