A cp -r és a cp -R (copy parancs) közötti különbség
On február 18, 2021 by admin cp -r
a fájlok rekurzív másolására szolgál, és cp -R
a könyvtárak rekurzív másolásához. De ellenőriztem, és úgy tűnik, hogy mind a fájlokat, mind a könyvtárakat másolom, ugyanazt. Tehát mi a különbség valójában?
Megjegyzések
- Ezeknek az opcióknak a Linux kézikönyvekben történő minden említése azt mondja, hogy ‘ szinonimák. (‘ nem szerepelnek más unix változatokon.)
Válasz
Míg a -R
posix jól meghatározott, a -r
nem hordozható!
Linux rendszeren a cp
, -r
és -R
GNU és BusyBox megvalósításai ekvivalensek.
A másik oldalon, ahogy a cp
POSIX kézikönyv oldalán olvashatja , -r
viselkedés a megvalósítás által meghatározott .
* 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.
Megjegyzések
- Az egyik különbség az lehet, hogy például az OSX-ben a
-r
a szimbolikus linkekkel jelölt valós fájlokat másolja, míg a-R
másolja át a szimbolikus linket, amire a legtöbbször szánják.
Válasz
Kisbetű -r
egy régebbi opció volt, amelyet a 4.1BSD-ben vezettek be, amely egyszerűen az összes nem könyvtárat fájlokká másolja. Vagyis, ha egy eszközzel vagy FIFO-val találkozott, akkor azt kinyitotta, elolvasta a tartalmat és a célállomáson létrehozott egy fájlt a tartalommal.
Nagybetű -R
egy szabványosított opció volt (a BSD-be a 4.4BSD-ben vezették be, bár a korábbi verziók a -r
szinonimája volt), amely egy eszköz, FIFO vagy más speciális fájl találkozásakor készítsen egy egyenértékű speciális fájlt a rendeltetési helyen.
Sok megvalósítás továbbra is fenntartja ezt a megkülönböztetést, de néhány (beleértve a Linuxra jellemző GNU verziót is) csak a -R
szemantika, -r
szinonimaként.
Válasz
A különbség az, hogy az egyik kis R betűt, a másik nagy R betűt használ. Ezen túl nincs különbség. Ugyanez, ha a --recursive
long opciót használja.
Megjegyzések
- A man oldalról: – R, -r, – rekurzív – a könyvtárakat rekurzívan másolja
- @DaveJennings: Az, hogy egy platformon ekvivalensek, még nem jelenti azt, hogy mindegyiken vannak. A
cp
néhány megvalósításánál valóban különbséget lehet tenni. Lásd: Véletlenszerű 832 ‘ válasza . @Ignacio tartalmazzon ebbe a válaszba egy minősítőt, amely azt mondja: “, ha acp
a modern GNU implementáció >
vagy valami ilyesmi.
-R
-t használni, és valójában az imént említett rendszerek néhány man oldala is ezt ajánlja. Válasz
OS X és a FreeBSD régi verzióiban -r
olyan, mint -R -L --copy-contents
a coreutils fájlban, vagy a szimbólumokat követve olvassa el a speciális fájlok és FIFO-k tartalmát. OS X, mkdir a;mkfifo a/b;cp -r a c
blokkolva lesz a FIFO olvasása közben, és mkdir a;ln -s /dev/zero a;cp -r a b
megkezdi a nullát a nullával .
Az
man oldalról az OS X-ben és a FreeBSD régi verzióiban:
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.
A FreeBSD új verzióiban -r
egyenértékű a következővel: -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
Rekurzív másolás esetén másolja a speciális fájlok (például FIFO-k és eszközfájlok) tartalmát úgy, mintha azok rendes fájlok lennének. Ez azt jelenti, hogy megpróbálja elolvasni az egyes forrásfájlok adatait, és beírja azokat a rendeltetési helyre. Általában hiba ezt az opciót használni, mivel általában nemkívánatos hatással van az olyan speciális fájlokra, mint a FIFOs, és azokra, amelyek általában a
/dev
könyvtárban találhatók.A legtöbb esetben acp -R --copy-contents
a végtelenségig lóg, és megpróbál olvasni a FIFO-ból és olyan speciális fájlokból, mint a/dev/console
, és kitölti a céllemezt, ha a/dev/zero
másolásához használja. Ennek az opciónak csak a rekurzív másolásakor van hatása, és ez nem befolyásolja a szimbolikus hivatkozások másolását.
Válasz
az egyik különbség, amelyet azt tapasztaltam, hogy -r nem másolja a rejtett könyvtárakat, míg az -R a rejtett könyvtárakat.
Kipróbáltam a .git könyvtárat a célkönyvtárban, és a fenti következtetésre jutottam. Jelenleg a centOS-t használom.
Lehet, hogy tévedek, de nyitott a vita tárgyára.
Megjegyzések
- Nem teszem ‘ ezt nem látja a CentOS 5-en;
-r
és-R
mindkettő rejtett könyvtárakat másol
Vélemény, hozzászólás?