Cp -r: n ja cp -R: n (kopiointikomento) välinen ero
On helmikuu 18, 2021 by admin cp -r
on tarkoitettu tiedostojen kopioimiseen rekursiivisesti, ja cp -R
hakemistojen kopioimiseksi rekursiivisesti. Mutta olen tarkistanut, ja molemmat näyttävät kopioivan sekä tiedostot että hakemistot, sama asia. Joten, mikä ero on?
Kommentit
- Jokainen maininta näistä vaihtoehdoista Linux-käyttöohjeissa kertoo, että ne ’ ovat uudelleen synonyymejä. (Ne ’ eivät ole joissakin muissa unix-muunnoksissa.)
Vastaa
Vaikka -R
on posix hyvin määritelty, -r
ei ole kannettava!
Linuxissa cp
, -r
ja -R
GNU- ja BusyBox-toteutukset ovat vastaavia.
Toisaalta, kuten voit lukea POSIX -sivun cp
, -r
käyttäytyminen on toteutuksen määrittelemää .
* 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.
Kommentit
- Yksi eroista olisi, että esimerkiksi OSX: ssä
-r
kopioi symbolisilla linkeillä osoitetut todelliset tiedostot, kun taas-R
kopioi symbolinen linkki, joka on tarkoitettu useimmiten.
Vastaa
Pienet -r
oli vanhempi vaihtoehto, joka otettiin käyttöön 4.1BSD: ssä ja joka vain kopioi kaikki muut hakemistot tiedostoiksi. Eli jos se löysi laitteen tai FIFO: n, se avaisi sen, lukisi sisällön ja luo määränpäähän tiedoston sisällön kanssa.
Isot kirjaimet -R
oli standardoitu vaihtoehto (joka otettiin käyttöön BSD: lle 4.4BSD: ssä, vaikka aikaisemmissa versioissa se oli synonyymi -r
), joka tapaisi laitteen, FIFO: n tai muun erikoistiedoston tee vastaava erityistiedosto määränpäähän.
Monet toteutukset säilyttävät edelleen tämän eron, mutta jotkut (mukaan lukien Linuxille tyypillinen GNU-versio) tarjoavat vain -R
semantiikka, synonyyminä -r
.
Vastaa
Ero on siinä, että yksi käyttää pieniä kirjaimia ”R” ja toinen käyttää isoja kirjaimia ”R”. Sen lisäksi ei ole eroa. Sama asia, jos käytät --recursive
-vaihtoehtoa.
Kommentit
- Man-sivulta: – R, -r, –rekursiiviset – kopioi hakemistot rekursiivisesti
- @DaveJennings: Pelkästään siksi, että ne ovat yksiselitteisiä yhdellä alustalla, ei tarkoita, että ne olisivat kaikissa. Joissakin
cp
-sovelluksen toteutuksissa on todellakin ero. Katso Satunnainen832 ’ -vastaus . @Ignacio sinun tulisi sisällyttää tähän vastaukseen tarkennin, joka sanoo ”, joscp
on moderni GNU-toteutus ” tai jotain sellaista. - @Caleb: Kysymys on merkitty tunnisteella ” linux ”. Mitä muuta se olisi?
- -R ja -r antavat erilaisen käyttäytymisen joissakin käyttämissäni järjestelmissä (OS X, FreeBSD, BusyBox coreutils; en ole varma, mitkä tällä hetkellä). Päätin kauan sitten, että oli järkevää käyttää aina vain
-R
, ja itse asiassa jotkut juuri mainituista järjestelmistä olevat man-sivut suosittelevat myös tätä.
vastaus
OS X: ssä ja FreeBSD: n vanhoissa versioissa -r
on kuin -R -L --copy-contents
coreutilsissa, tai se seuraa symlinkkejä ja lukee erityistiedostojen ja FIFO: iden sisällön.
mkdir a;touch b;ln -s $PWD/b a;cp -r a c
korvaa symlinkin kohdetiedostolla OS X, mkdir a;mkfifo a/b;cp -r a c
estetään lukemalla FIFOa, ja mkdir a;ln -s /dev/zero a;cp -r a b
alkaa täyttää b/zero
nollilla .
cp
-sivulta OS X: ssä ja FreeBSD: n vanhoissa versioissa:
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.
FreeBSD: n uusissa versioissa -r
vastaa -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
Jos kopioit rekursiivisesti, kopioi minkä tahansa erikoistiedoston (esim. FIFO- ja laitetiedostot) sisältö kuin tavalliset tiedostot. Tämä tarkoittaa, että yritetään lukea kunkin lähdetiedoston tiedot ja kirjoittaa ne kohteeseen. Yleensä on virhe käyttää tätä vaihtoehtoa, koska sillä on tavallisesti ei-toivottuja vaikutuksia erikoistiedostoihin, kuten FIFOihin, ja tiedostoihin, jotka tyypillisesti löytyvät hakemistosta
/dev
.Useimmissa tapauksissacp -R --copy-contents
roikkuu loputtomasti yrittäen lukea FIFOista ja erikoistiedostoista, kuten/dev/console
, ja se täyttää kohdelevyn, jos käytät sitä kopioidaksesi/dev/zero
. Tällä vaihtoehdolla ei ole vaikutusta, ellei kopioida rekursiivisesti, eikä se vaikuta symbolisten linkkien kopiointiin.
Vastaa
yksi ero havaitsin, että -r eivät kopioi piilotetut hakemistot, kun -R kopioi piilotetut hakemistot.
Testasin sen .git-hakemiston kohdehakemistossa ja päädyin edellä olevaan johtopäätökseen. Käytän tällä hetkellä centOSia.
Voin olla väärässä, mutta se on avoin keskustelulle.
Kommentit
- En aio ’ ei näe tätä CentOS 5: ssä;
-r
ja-R
molemmat kopioivat piilotetut hakemistot
Vastaa