kmand cp: tikkopja korrettament folders tal-fajls f'*nix

kmand cp: tikkopja korrettament folders tal-fajls f'*nix

Dan l-artikolu se jiżvela xi affarijiet mhux ovvji relatati mal-użu ta wildcards meta tikkopja, imġieba ta 'kmand ambigwa cp meta tikkopja, kif ukoll metodi li jippermettulek tikkopja b'mod korrett numru kbir ta 'fajls mingħajr ma taqbeż jew tiġġarraf.

Ejja ngħidu li għandna bżonn nikkopja kollox mill-folder /source għall-folder /target.

L-ewwel ħaġa li tiġi f'moħħna hija:

cp /source/* /target

Ejja nikkoreġu immedjatament dan il-kmand biex:

cp -a /source/* /target

Ewlenin -a se żżid l-ikkupjar tal-attributi, id-drittijiet kollha u żżid ir-rikorsjoni. Meta ma tkunx meħtieġa riproduzzjoni eżatta tad-drittijiet, ċavetta hija biżżejjed -r.

Wara l-ikkupjar, insibu li mhux il-fajls kollha ġew ikkupjati - fajls li jibdew b'tikka bħal:

.profile
.local
.mc

u simili.

Għaliex ġara dan?

Minħabba li l-wildcards huma pproċessati mill-qoxra (bash f'każ tipiku). B'mod awtomatiku, bash se jinjora l-fajls kollha li jibdew bit-tikek, peress li jittrattahom bħala moħbija. Biex nevitaw din l-imġieba se jkollna nbiddlu l-imġieba bash bl-użu tal-kmand:

shopt -s dotglob

Biex tiżgura li din il-bidla fl-imġieba tippersisti wara reboot, tista 'toħloq fajl wildcard.sh b'dan il-kmand fil-folder /etc/profile.d (Forsi d-distribuzzjoni tiegħek għandha folder differenti).

U jekk ma jkun hemm l-ebda fajls fid-direttorju tas-sors, allura l-qoxra ma tkun tista 'tissostitwixxi xejn minflok l-asterisk, u l-ikkupjar se jfalli wkoll bi żball. Hemm għażliet kontra din is-sitwazzjoni failglob и nullglob. Ikollna bżonn nissettjaw failglob, li jipprevjeni li l-kmand jiġi esegwit. nullglob mhux se taħdem, peress li tikkonverti string b'wildcards li ma sabitx taqbila fi string vojta (tul żero), li għal cp se jikkawża żball.

Madankollu, jekk hemm eluf ta 'fajls jew aktar fil-folder, allura l-approċċ tal-wildcards għandu jiġi abbandunat għal kollox. Il-fatt hu li bash tespandi l-wildcards f'linja ta' kmand twila ħafna bħal:

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

Hemm limitu fuq it-tul tal-linja tal-kmand, li nistgħu nsibuha billi tuża l-kmand:

getconf ARG_MAX

Ejja nieħdu t-tul massimu tal-linja tal-kmand f'bytes:

2097152

Jew:

xargs --show-limits

Ikollna xi ħaġa bħal:

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

Allura, ejja nagħmlu mingħajr wildcards għal kollox.

Ejja niktbu biss

cp -a /source /target

U hawn qed niffaċċjaw ambigwità fl-imġieba cp. Jekk il-folder /target ma jeżistix, allura nġibu dak li neħtieġu.

Madankollu, jekk il-folder fil-mira jeżisti, allura l-fajls jiġu kkupjati fil-folder /target/source.

Aħna ma nistgħux dejjem inħassru l-folder /target minn qabel, peress li jista 'jkun fih fajls li neħtieġu u l-għan tagħna, pereżempju, huwa li nissupplimentaw il-fajls f' /target b'fajls minn /source.

Jekk il-folders tas-sors u tad-destinazzjoni kienu jissemmew l-istess, pereżempju, konna qed nikkupjaw minn /source għal /home/source, allura nistgħu nużaw il-kmand:

cp -a /source /home

U wara l-ikkupjar, il-fajls f'/home/source jkunu supplimentati b'fajls minn /source.

Din hija problema loġika: nistgħu nżidu fajls fid-direttorju tad-destinazzjoni jekk il-folders jissemmew l-istess, iżda jekk huma differenti, allura l-folder tas-sors jitqiegħed ġewwa d-destinazzjoni. Kif tikkopja fajls minn / sors għal / mira billi tuża cp mingħajr wildcards?

Biex nersqu din il-limitazzjoni ta 'ħsara, nużaw soluzzjoni mhux ovvja:

cp -a /source/. /target

Dawk li huma familjari mad-DOS u l-Linux diġà fehmu kollox: ġewwa kull folder hemm 2 folders inviżibbli "." u “..”, li huma psewdo-folders links għad-direttorji kurrenti u ogħla.

  • Meta tikkopja cp jiċċekkja għall-eżistenza u jipprova joħloq /target/.
  • Direttorju bħal dan jeżisti u huwa /target
  • Fajls minn /source huma kkupjati għal /target b'mod korrett.

Allura, hang f'qafas skuri fil-memorja tiegħek jew mal-ħajt:

cp -a /source/. /target

L-imġieba ta 'dan il-kmand hija ċara. Kollox se jaħdem mingħajr żbalji, irrispettivament minn jekk għandekx miljun fajl jew xejn.

Sejbiet

Jekk għandek bżonn tikkopja kollha fajls minn folder għal ieħor, ma nużawx wildcards, huwa aħjar li nużawhom minflok cp flimkien ma' perjodu fl-aħħar tal-folder tas-sors. Dan se jikkopja l-fajls kollha, inklużi dawk moħbija, u mhux se tfalli b'miljuni ta 'fajls jew l-ebda fajls.

Wara kelma

vmspike issuġġerixxa verżjoni tal-kmand b'riżultat simili:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

NOTA: każ tal-ittri T għandha t-tifsira. Jekk tħallat, ikollok żibel sħiħ: id-direzzjoni tal-ikkupjar tinbidel.
Grazzi:

  • Kumpaniji RUVDS.COM għall-appoġġ u l-opportunità li tippubblika fuq il-blog tiegħek fuq Habré.
  • Għal kull immaġini Kunċett Triplu. L-istampa hija kbira ħafna u dettaljata, tista 'tinfetaħ f'tieqa separata.

PS Jekk jogħġbok ibgħat kwalunkwe żball li tinnota f'messaġġ privat. Inżid il-karma tiegħi għal dan.

kmand cp: tikkopja korrettament folders tal-fajls f'*nix

Sors: www.habr.com

Żid kumment