Skip to content
Tiantan
Articles

Het verschil tussen cp -r en cp -R (kopieeropdracht)

Geplaatst op februari 18, 2021 door admin

cp -r is bedoeld om bestanden recursief te kopiëren, en cp -R voor het recursief kopiëren van mappen. Maar ik heb het gecontroleerd, en beide lijken zowel bestanden als mappen te kopiëren, hetzelfde. Dus, wat is eigenlijk het verschil?

Reacties

  • Elke vermelding van deze opties in de Linux-handleidingen zegt dat ze ‘ synoniemen zijn. (Ze ‘ zijn niet op sommige andere Unix-varianten.)

Antwoord

Hoewel -R posix goed gedefinieerd is, is -r niet draagbaar!

Op Linux, in de GNU- en BusyBox-implementaties van cp, -r en -R zijn equivalent.

Aan de andere kant, zoals je kunt lezen in de POSIX man-pagina van cp , -r gedrag is implementatie-gedefinieerd .

 * 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. 

Reacties

  • Een van de verschillen zou zijn dat, in OSX bijvoorbeeld, -r de echte bestanden kopieert die door symbolische links worden aangeduid, terwijl -R kopieer de symbolische link, zoals deze meestal bedoeld is.

Answer

Kleine letters -r was een oudere optie, geïntroduceerd in 4.1BSD, die eenvoudig alle niet-mappen als bestanden zou kopiëren. Dat wil zeggen, als het een apparaat of FIFO zou tegenkomen, zou het het openen, de inhoud lezen en een bestand maken op de bestemming met de inhoud.

Hoofdletters -R was een gestandaardiseerde optie (geïntroduceerd in BSD in 4.4BSD, hoewel eerdere versies het als synoniem hadden voor -r) die bij het tegenkomen van een apparaat, FIFO of ander speciaal bestand, maak een equivalent speciaal bestand op de bestemming.

Veel implementaties behouden dit onderscheid nog steeds, maar sommige (inclusief de GNU-versie die typisch is voor Linux) bieden alleen de -R semantiek, met -r als synoniem.

Antwoord

Het verschil is dat de ene gebruikt een kleine “R” en de andere gebruikt een hoofdletter “R”. Verder geen verschil. Hetzelfde als je de --recursive lange optie gebruikt.

Reacties

  • Van de man-pagina: – R, -r, –recursive – kopieer directories recursief
  • @DaveJennings: alleen omdat ze gelijkwaardig zijn op één platform betekent niet ‘ niet dat ze op allemaal staan. Bij sommige implementaties van cp is er eigenlijk een onderscheid. Bekijk Random832 ‘ s antwoord . @Ignacio je zou in dit antwoord een kwalificatie moeten opnemen die ” zegt als je cp de moderne GNU-implementatie is ” of iets dergelijks.
  • @Caleb: de vraag is getagd met ” linux “. Wat zou het anders zijn?
  • -R en -r vertonen ander gedrag op sommige van de systemen die ik gebruik (OS X, FreeBSD, BusyBox coreutils; ik weet niet zeker welke op dit moment). Ik besloot lang geleden dat het verstandig was om altijd alleen -R te gebruiken, en in feite bevelen sommige man-paginas op de zojuist genoemde systemen dat ook aan.

Answer

In OS X en oude versies van FreeBSD is -r vergelijkbaar met -R -L --copy-contents in coreutils, of het volgt symlinks en leest de inhoud van speciale bestanden en FIFOs.

mkdir a;touch b;ln -s $PWD/b a;cp -r a c vervangt de symlink door het doelbestand in OS X, mkdir a;mkfifo a/b;cp -r a c wordt geblokkeerd bij het lezen van de FIFO en mkdir a;ln -s /dev/zero a;cp -r a b begint b/zero met nullen te vullen .

Van de cp man-pagina in OS X en oude versies van FreeBSD:

Historic versions of the cp utility had a -r option. This implementation supports that option; however, its use is strongly discouraged, as it does not correctly copy special files, symbolic links, or fifo"s. 

In nieuwe versies van FreeBSD is -r gelijk aan -RL:

Historic versions of the cp utility had a -r option. This implementation supports that option, however, its behavior is different from historical FreeBSD behavior. Use of this option is strongly discouraged as the behavior is implementation-dependent. In FreeBSD, -r is a synonym for -RL and works the same unless modified by other flags. Historical imple- mentations of -r differ as they copy special files as normal files while recreating a hierarchy. 

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html :

--copy-contents

Als u recursief kopieert, kopieer dan de inhoud van speciale bestanden (bijv. FIFOs en apparaatbestanden) alsof het gewone bestanden zijn. Dit betekent dat u probeert de gegevens in elk bronbestand te lezen en naar de bestemming te schrijven. Het is meestal een vergissing om deze optie te gebruiken, aangezien het normaal gesproken ongewenste effecten heeft op speciale bestanden zoals FIFOs en diegene die doorgaans worden aangetroffen in de /dev directory.In de meeste gevallen zal cp -R --copy-contents voor onbepaalde tijd hangen bij het lezen van FIFOs en speciale bestanden zoals /dev/console, en het zal je bestemmingsschijf vullen als je gebruikt het om /dev/zero te kopiëren. Deze optie heeft geen effect, tenzij recursief wordt gekopieerd, en heeft geen invloed op het kopiëren van symbolische koppelingen.

Antwoord

een van de verschillen vond ik dat -r niet kopieer verborgen mappen terwijl -R verborgen mappen kopieert.

Ik heb de .git-map in de doelmap getest en kwam tot bovenstaande conclusie. Ik gebruik momenteel centOS.

Misschien heb ik het mis, maar het staat open voor discussie.

Reacties

  • Ik don ‘ zie dit niet op CentOS 5; -r en -R kopiëren beide verborgen mappen

Geschreven door admin

Geef een reactie Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Meest recente berichten

  • Met behulp van een balun met een resonerende dipool
  • Wat is het verschil tussen “ kan niet ” en “ kan niet ”? [duplicate]
  • Kunt u zich bij JFK op binnenlandse vluchten tussen terminals aan de airside verplaatsen?
  • “ Zeer gewaardeerd ” of “ zeer gewaardeerd ”
  • Wat betekent ' abstracte ideeën '? [gesloten]

Archief

  • februari 2021
  • januari 2021
  • december 2020
  • november 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Auteursrecht Tiantan 2021 | Thema door Theme in Progress | Mogelijk gemaakt door WordPress

Naar boven