Skip to content
Tiantan
Articles

Diferența dintre cp -r și cp -R (comandă copiere)

On februarie 18, 2021 by admin

cp -r este menită să copieze fișiere recursiv, și cp -R pentru copierea directoarelor recursiv. Dar am „verificat și ambele par să copieze atât fișiere, cât și directoare, același lucru. Deci, care este diferența de fapt?

Comentarii

  • Fiecare mențiune a acestor opțiuni din manualele Linux spune că acestea ‘ sunt sinonime. (Ei ‘ nu fac parte din alte variante unix.)

Răspuns

În timp ce -R este pozix bine definit, -r nu este portabil!

Pe Linux, în implementările GNU și BusyBox ale cp, -r și -R sunt echivalente.

Pe de altă parte, după cum puteți citi în pagina de manual POSIX din cp , -r comportamentul este implementat-definit .

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

Comentarii

  • Una dintre diferențe ar fi că, în OSX, de exemplu, -r va copia fișierele reale indicate de legături simbolice în timp ce -R copiați legătura simbolică care este destinată de cele mai multe ori.

Răspuns

Minuscule -r a fost o opțiune mai veche, introdusă în 4.1BSD, care ar copia pur și simplu toate fișierele non-directoare. Adică, dacă a întâlnit un dispozitiv sau FIFO, l-ar deschide, ar citi conținutul și ar crea un fișier la destinație cu conținutul.

Majuscule -R a fost o opțiune standardizată (introdusă în BSD în 4.4BSD, deși versiunile anterioare o aveau ca sinonim cu -r) care, la întâlnirea cu un dispozitiv, FIFO sau alt fișier special, faceți un fișier special echivalent la destinație.

Multe implementări păstrează în continuare această distincție, dar unele (inclusiv versiunea GNU tipică pentru Linux) furnizează doar -R semantică, cu -r ca sinonim.

Răspuns

Diferența este că una folosește un „R” cu litere mici, iar cealaltă folosește „R” cu majuscule. Dincolo de asta, nici o diferență. Același lucru dacă utilizați opțiunea --recursive lungă.

Comentarii

  • Din pagina de manual: – R, -r, –recursive – copiați directoare recursiv
  • @DaveJennings: Doar pentru că sunt echivolente pe o platformă, nu ‘ înseamnă că sunt pe toate. În unele implementări ale cp există de fapt o distincție. Vedeți răspunsul Random832 ‘ . @Ignacio ar trebui să includeți un calificativ în acest răspuns care să spună ” dacă cp este implementarea modernă GNU ” sau ceva de genul acesta.
  • @Caleb: Întrebarea este etichetată ” linux „. Ce altceva ar fi?
  • -R și -r oferă un comportament diferit pe unele dintre sistemele pe care le folosesc (OS X, FreeBSD, coreyutile BusyBox; nu sunt sigur care sunt momentan). Am decis cu mult timp în urmă că este prudent să folosim întotdeauna numai -R și, de fapt, unele dintre paginile de man de pe sistemele menționate tocmai recomandă acest lucru.

Răspuns

În OS X și versiunile vechi ale FreeBSD -r este ca -R -L --copy-contents în coreutils, sau urmează link-uri simbolice și citește conținutul fișierelor speciale și FIFO-urilor.

mkdir a;touch b;ln -s $PWD/b a;cp -r a c înlocuiește link-ul simbolic cu fișierul țintă în OS X, mkdir a;mkfifo a/b;cp -r a c este blocat citind FIFO și mkdir a;ln -s /dev/zero a;cp -r a b începe să umple b/zero cu zerouri .

Din cp pagina manuală în OS X și versiunile vechi ale 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. 

În versiunile noi ale FreeBSD -r este echivalent cu -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

Dacă copiați recursiv, copiați conținutul oricăror fișiere speciale (de exemplu, FIFO-uri și fișiere de dispozitiv) ca și cum ar fi fișiere obișnuite. Aceasta înseamnă să încercați să citiți datele din fiecare fișier sursă și să le scrieți la destinație. Este de obicei o greșeală să folosești această opțiune, deoarece are în mod normal efecte nedorite asupra fișierelor speciale precum FIFO-urile și pe cele găsite în mod obișnuit în directorul /dev.În majoritatea cazurilor, cp -R --copy-contents va atârna la nesfârșit încercând să citească din FIFO-uri și fișiere speciale precum /dev/console și vă va umple discul de destinație dacă îl utilizați pentru a copia /dev/zero. Această opțiune nu are efect decât dacă copiați recursiv și nu afectează copierea legăturilor simbolice.

Răspuns

una dintre diferențe am constatat că -r nu copiați directoare ascunse în timp ce -R copiază directoare ascunse.

Am testat directorul .git în directorul țintă și am ajuns la concluzia de mai sus. În prezent folosesc centOS.

S-ar putea să mă înșel, dar este deschis discuției.

Comentarii

  • Nu cred ‘ nu vezi acest lucru pe CentOS 5; -r și -R ambele copieză directoare ascunse

Written by admin

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Articole recente

  • Folosind un balun cu un dipol rezonant
  • Care este diferența dintre “ nu poate ” și “ nu poate ”? [duplicat]
  • La JFK, vă puteți deplasa între terminalele aeriene pe zborurile interne?
  • “ Apreciat profund ” sau “ apreciat cu drag ”
  • Ce înseamnă ' idei abstracte '? [închis]

Arhive

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

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top