Salta al contenuto
Tiantan
Articles

La differenza tra cp -r e cp -R (comando di copia)

Su Febbraio 18, 2021 da admin

cp -r ha lo scopo di copiare i file in modo ricorsivo, e cp -R per copiare le directory in modo ricorsivo. Ma ho controllato, ed entrambi sembrano copiare sia i file che le directory, la stessa cosa. Allora, qual è la differenza in realtà?

Commenti

  • Ogni menzione di queste opzioni nei manuali di Linux dice che sono ‘ sinonimi. (Non sono ‘ su alcune altre varianti di Unix.)

Rispondi

Sebbene -R sia ben definito posix, -r non è portabile!

Su Linux, in le implementazioni GNU e BusyBox di cp, -r e -R sono equivalenti.

Dallaltro lato, come puoi leggere nella pagina di manuale POSIX di cp , -r il comportamento è definito dallimplementazione .

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

Commenti

  • Una delle differenze sarebbe che, ad esempio in OSX, -r copierà i file reali puntati da link simbolici mentre -R copia il link simbolico che è quello che è inteso la maggior parte delle volte.

Risposta

-r era unopzione precedente, introdotta in 4.1BSD, che copiava semplicemente tutte le non directory come file. Cioè, se incontra un dispositivo o FIFO, lo apre, ne legge il contenuto e crea un file nella destinazione con i contenuti.

Maiuscolo -R era unopzione standardizzata (introdotta in BSD in 4.4BSD, sebbene le versioni precedenti lo avessero come sinonimo di -r) che, incontrando un dispositivo, FIFO o altri file speciali, crea un file speciale equivalente nella destinazione.

Molte implementazioni mantengono ancora questa distinzione, ma alcune (inclusa la versione GNU tipica di Linux) forniscono solo -R semantica, con -r come sinonimo.

Risposta

La differenza è che uno usa una “R” minuscola e laltro usa una “R” maiuscola. Oltre a ciò, nessuna differenza. Stessa cosa se utilizzi lopzione --recursive long.

Commenti

  • Dalla pagina man: – R, -r, –recursive – copia le directory in modo ricorsivo
  • @DaveJennings: Solo perché sono equivalenti su una piattaforma ‘ non significa che siano su tutte. In alcune implementazioni di cp cè effettivamente una distinzione. Visualizza la risposta di Random832 ‘ . @Ignacio dovresti includere un qualificatore in questa risposta che dice ” se il tuo cp è la moderna implementazione GNU ” o qualcosa del genere.
  • @Caleb: la domanda è contrassegnata con ” linux “. Cosaltro sarebbe?
  • -R e -r danno un comportamento diverso su alcuni dei sistemi che uso (OS X, FreeBSD, coreutils BusyBox; non sono sicuro di quali al momento). Ho deciso molto tempo fa che fosse prudente usare sempre solo -R, e in effetti anche alcune delle pagine man sui sistemi appena menzionati lo raccomandano.

Risposta

In OS X e vecchie versioni di FreeBSD -r è come -R -L --copy-contents in coreutils, oppure segue collegamenti simbolici e legge il contenuto di file speciali e FIFO.

mkdir a;touch b;ln -s $PWD/b a;cp -r a c sostituisce il collegamento simbolico con il file di destinazione in OS X, mkdir a;mkfifo a/b;cp -r a c viene bloccato nella lettura del FIFO e mkdir a;ln -s /dev/zero a;cp -r a b inizia a riempire b/zero con zeri .

Dalla pagina man cp in OS X e vecchie versioni di 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. 

Nelle nuove versioni di FreeBSD -r è equivalente a -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

Se si copia in modo ricorsivo, copia il contenuto di qualsiasi file speciale (ad es. FIFO e file di dispositivo) come se fossero file normali. Ciò significa provare a leggere i dati in ogni file di origine e scriverli nella destinazione. Di solito è un errore usare questa opzione, poiché normalmente ha effetti indesiderati su file speciali come FIFO e quelli che si trovano tipicamente nella directory /dev.Nella maggior parte dei casi, cp -R --copy-contents si bloccherà indefinitamente cercando di leggere da FIFO e file speciali come /dev/console, e riempirà il disco di destinazione se lo usi per copiare /dev/zero. Questa opzione non ha effetto a meno che non si copi in modo ricorsivo e non influisce sulla copia dei collegamenti simbolici.

Risposta

una delle differenze che ho scoperto che -r non lo fa copia le directory nascoste mentre -R copia le directory nascoste.

Lho testato nella directory .git nella directory di destinazione e sono giunto alla conclusione precedente. Attualmente sto usando centOS.

Potrei sbagliarmi ma è aperto a discussioni.

Commenti

  • Non lo so ‘ t vedere questo su CentOS 5; -r e -R entrambi copiano directory nascoste

Scritto da admin

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Articoli recenti

  • Utilizzando un balun con un dipolo risonante
  • Qual è la differenza tra “ non può ” e “ non può ”? [duplicate]
  • Al JFK, puoi muoverti tra i terminal airside sui voli nazionali?
  • “ Molto apprezzato ” o “ molto apprezzato ”
  • Che cosa significa ' idee astratte '? [chiuso]

Archivi

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

Testo del copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Torna Su