gorchymyn cp: copïo ffolderi ffeil yn gywir yn * nix

gorchymyn cp: copïo ffolderi ffeil yn gywir yn * nix

Bydd yr erthygl hon yn datgelu rhai pethau nad ydynt yn amlwg yn ymwneud â defnyddio cardiau gwyllt wrth gopïo, ymddygiad gorchymyn amwys cp wrth gopïo, yn ogystal â dulliau sy'n eich galluogi i gopïo nifer enfawr o ffeiliau yn gywir heb sgipio neu chwalu.

Gadewch i ni ddweud bod angen i ni gopïo popeth o'r ffolder / ffynhonnell i'r ffolder / targed.

Y peth cyntaf sy'n dod i'r meddwl yw:

cp /source/* /target

Gadewch i ni gywiro'r gorchymyn hwn ar unwaith i:

cp -a /source/* /target

Allwedd -a yn ychwanegu copïo o'r holl briodoleddau, hawliau ac yn ychwanegu ailadrodd. Pan nad oes angen atgynhyrchu hawliau yn union, mae allwedd yn ddigon -r.

Ar ôl copïo, byddwn yn canfod na chafodd pob ffeil ei chopïo - ffeiliau sy'n dechrau gyda dot fel:

.profile
.local
.mc

ac yn y blaen.

Pam digwyddodd hyn?

Oherwydd bod cardiau gwyllt yn cael eu prosesu gan y gragen (bash mewn achos nodweddiadol). Yn ddiofyn, bydd bash yn anwybyddu pob ffeil sy'n dechrau gyda dotiau, gan ei fod yn eu trin fel rhai cudd. Er mwyn osgoi'r ymddygiad hwn bydd yn rhaid i ni newid ymddygiad bash gan ddefnyddio'r gorchymyn:

shopt -s dotglob

Er mwyn sicrhau bod y newid ymddygiad hwn yn parhau ar ôl ailgychwyn, gallwch greu ffeil wildcard.sh gyda'r gorchymyn hwn yn y ffolder /etc/profile.d (Efallai bod gan eich dosbarthiad ffolder wahanol).

Ac os nad oes ffeiliau yn y cyfeiriadur ffynhonnell, yna ni fydd y gragen yn gallu amnewid unrhyw beth yn lle'r seren, a bydd copïo hefyd yn methu â gwall. Mae opsiynau yn erbyn y sefyllfa hon failglob и nullglob. Bydd angen i ni osod failglob, a fydd yn atal y gorchymyn rhag cael ei weithredu. nullglob Ni fydd yn gweithio, gan ei fod yn trosi llinyn gyda wildcards na ddaeth o hyd i gyfateb yn llinyn gwag (hyd sero), sydd ar gyfer cp bydd yn achosi gwall.

Fodd bynnag, os oes miloedd o ffeiliau neu fwy yn y ffolder, yna dylid rhoi'r gorau i'r dull wildcards yn gyfan gwbl. Y ffaith yw bod bash yn ehangu cardiau gwyllt i linell orchymyn hir iawn fel:

cp -a /souce/a /source/b /source/c …… /target

Mae cyfyngiad ar hyd y llinell orchymyn, y gallwn ei ddarganfod gan ddefnyddio'r gorchymyn:

getconf ARG_MAX

Gadewch i ni gael hyd mwyaf y llinell orchymyn mewn beit:

2097152

Или:

xargs --show-limits

Rydyn ni'n cael rhywbeth fel:

….
Maximum length of command we could actually use: 2089314
….

Felly, gadewch i ni wneud heb wildcards yn gyfan gwbl.

Gadewch i ni ysgrifennu

cp -a /source /target

A dyma ni'n wynebu amwysedd ymddygiad cp. Os nad yw'r ffolder / targed yn bodoli, yna byddwn yn cael yr hyn sydd ei angen arnom.

Fodd bynnag, os yw'r ffolder targed yn bodoli, yna bydd y ffeiliau'n cael eu copïo i'r ffolder /target/source.

Ni allwn bob amser ddileu'r ffolder targed / ymlaen llaw, gan y gallai gynnwys ffeiliau sydd eu hangen arnom a'n nod, er enghraifft, yw ychwanegu at y ffeiliau yn / targed gyda ffeiliau o / ffynhonnell.

Pe bai'r ffolderi ffynhonnell a chyrchfan yn cael eu henwi yr un peth, er enghraifft, roeddem yn copïo o / ffynhonnell i / home / source, yna gallem ddefnyddio'r gorchymyn:

cp -a /source /home

Ac ar ôl copïo, byddai'r ffeiliau yn /home/source yn cael eu hategu â ffeiliau o / ffynhonnell.

Mae hon yn broblem resymegol: gallwn ychwanegu ffeiliau yn y cyfeiriadur cyrchfan os yw'r ffolderi wedi'u henwi yr un peth, ond os ydynt yn wahanol, yna bydd y ffolder ffynhonnell yn cael ei osod y tu mewn i'r cyrchfan. Sut i gopïo ffeiliau o / ffynhonnell i / targed gan ddefnyddio cp heb gardiau gwyllt?

I fynd o gwmpas y cyfyngiad niweidiol hwn, rydym yn defnyddio datrysiad nad yw'n amlwg:

cp -a /source/. /target

Mae'r rhai sy'n gyfarwydd â DOS a Linux eisoes wedi deall popeth: y tu mewn i bob ffolder mae 2 ffolder anweledig “.” a “..”, sef cysylltiadau ffug-ffolderi i'r cyfeiriaduron cyfredol ac uwch.

  • Wrth gopïo cp yn gwirio bodolaeth ac yn ceisio creu /target/.
  • Mae cyfeiriadur o'r fath yn bodoli ac mae'n /targed
  • Ffeiliau o / ffynhonnell yn cael eu copïo i /targed yn gywir.

Felly, hongianwch ef mewn ffrâm feiddgar er cof ichi neu ar y wal:

cp -a /source/. /target

Mae ymddygiad y gorchymyn hwn yn glir. Bydd popeth yn gweithio heb wallau, ni waeth a oes gennych filiwn o ffeiliau neu ddim o gwbl.

Canfyddiadau

Os oes angen i chi gopïo holl ffeiliau o un ffolder i'r llall, nid ydym yn defnyddio wildcards, mae'n well eu defnyddio yn lle hynny cp wedi'i gyfuno â chyfnod ar ddiwedd y ffolder ffynhonnell. Bydd hyn yn copïo pob ffeil, gan gynnwys rhai cudd, ac ni fydd yn methu gyda miliynau o ffeiliau neu ddim ffeiliau o gwbl.

Afterword

vmspike awgrymodd fersiwn gorchymyn gyda chanlyniad tebyg:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

NODYN: cas llythyr T sydd â'r ystyr. Os byddwch chi'n ei gymysgu, fe gewch chi sbwriel llwyr: bydd y cyfeiriad copïo yn newid.
Diolch:

  • Cwmnïau RUVDS.COM am gefnogaeth a'r cyfle i gyhoeddi ar eich blog ar Habré.
  • Fesul delwedd Cysyniad Triphlyg. Mae'r llun yn fawr iawn ac yn fanwl, gellir ei agor mewn ffenestr ar wahân.

PS Anfonwch unrhyw wallau y byddwch yn sylwi arnynt mewn neges breifat. Rwy'n cynyddu fy karma ar gyfer hyn.

gorchymyn cp: copïo ffolderi ffeil yn gywir yn * nix

Ffynhonnell: hab.com

Ychwanegu sylw