Meeskond cp: Ôiged failide ja kaustade kopeerimine *nix'is

Meeskond cp: Ôiged failide ja kaustade kopeerimine *nix'is

Selles artiklis kÀsitletakse mÔningaid varjatud aspekte, mis on seotud wildcards kopeerimise, kÀskude ebaselge kÀitumisega cp kopeerimisel ning viise, kuidas Ôigesti kopeerida tohutult faile ilma vahelt jÀÀkide ja tÔrgeteta.

Oletame, et peame kopeerima kÔik kaustast /source kausta /target.

Esimene mÔte on:

cp /source/* /target

Parandame selle kÀsku nii:

cp -a /source/* /target

Ala -a lisab kÔikide atribuute, Ôiguste ja rekursiooni kopeerimise. Kui tÀpne Ôiguste taastamine ei ole vajalik, piisab ainult vÔtme kasutamisest. -r.

PĂ€rast kopeerimist avastame, et kĂ”ik failid ei olnud kopeeritud — tĂ€helepanuta jĂ€id failid, mis algavad punktiga, nagu:

.profiil
.kohalik
.mc

ja sarnased.

Kuidas see juhtus?

Sest wildcards töötab shellis (bash tĂŒĂŒpiliselt). Vaikimisi bash ignoreerib kĂ”iki faile, mis algavad punktidega, kuna need tĂ”lgendatakse kui peidetud. Sellise kĂ€itumise vĂ€ltimiseks peame muutma bash kĂ€sku:

shopt -s dotglob

Selle kÀitumise muutmise sÀilitamiseks pÀrast taaskÀivitamist vÔite luua fail wildcard.sh selle kÀsuga kaustas /etc/profile.d (vÔib-olla on teie distributsioonis teine kaust).

Ja kui allika kaustas ei ole faile, ei saa shell midagi tĂ€rniga asendada ja kopeerimine lĂ”peb samuti veaga. Sellise olukorra vĂ€ltimiseks on olemas valikud failglob ja nullglob. Me peame seadma failglob, mis ei lase kĂ€sklusel tĂ€ituda. nullglob ei sobi, kuna see muudab tĂ€rniga vastet leidmata jÀÀnud rea tĂŒhjaks reaksi (nullpikkuseks), mis toob kaasa cp vea.

Kuid kui kaustas on tuhandeid faile vÔi rohkem, siis tasub tÀrniga lÀhenemisest sootuks loobuda. Asi on selles, et bash arendab tÀrne vÀga pikaks kÀsureaks nagu:

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

 /target

KÀsurea pikkusele on piirang, mille saame teada, kasutades kÀsku:

getconf ARG_MAX

Saame maksimaalse kÀsurea pikkuse baitides:

2097152

VÔi:

xargs --show-limits

Saame midagi sellist:


..
Maksimaalne pikkus kÀsust, mida me tÔeliselt kasutada saame: 2089314

.

Nii et jÀtkame ilma tÀrnideta.

Lihtsalt kirjutame

cp -a /source /target

Ja siin seisame silmitsi kÀitumise ebamugavusega cp. Kui kaust /target ei eksisteeri, saame seda, mida vajame.

Kuid kui sihtkaust on olemas, kopeeritakse failid kausta /target/source.

Me ei pruugi alati varem kausta /target kustutada, kuna seal vÔivad olla vajalikud failid ja meie eesmÀrk on, nÀiteks, tÀiendada faile kaustas /target failidega kaustast /source.

Kui allika- ja vastuvÔtu kaustad oleksid sama nimega, nÀiteks kopeerides kaustast /source kausta /home/source, vÔiks kasutada kÀsku:

cp -a /source /home

Ja pÀrast kopeerimist oleksid failid kaustas /home/source tÀiendetud failidega kaustast /source.

Selline loogiline mÔistatus: me saame tÀiendada faile vastuvÔtu kaustas, kui kaustade nimed on samad, kuid kui need erinevad, asetatakse allika kaust vastuvÔtja sisse. Kuidas kopeerida faile kaustast /source kausta /target kasutades cp-d ilma wildcards-ta?

Selle kahjuliku piiri vĂ€ltimiseks kasutame mitteĂŒlemise lahendust:

cp -a /source/. /target

Need, kes tunnevad hĂ€sti DOS-i ja Linuxi, on juba kĂ”ik aru saanud: iga kausta sees on 2 nĂ€htamatut kausta «.» ja «..», mis on psĂŒhholoogilised kaustad viidatud praegusele ja ĂŒlemisele kaustale.

  • Kopeerimise ajal cp kontrollib olemasolu ja ĂŒritab luua /target/.
  • Selline kaust on olemas ja see on /target.
  • Failid on Ă”igesti kopeeritud kaustast /source kausta /target.

Seega, paneme selle oma mÀlu vÔi seina paksu raamiga kinni:

cp -a /source/. /target

Selle kĂ€su kĂ€itumine on ĂŒheselt mĂ”istetav. KĂ”ik töötab tĂ”rgeteta, olenemata sellest, kas teil on miljon faili vĂ”i ei ole neid ĂŒldse.

JĂ€reldused

Kui on vaja kopeerida kĂ”ik faile ĂŒhest kaustast teise, ei kasuta wildcards, selle asemel on parem kasutada cp koos punktiga lĂ”pus allika kaustast. See kopeerib kĂ”ik failid, sealhulgas varjatud failid, ja ei kuku kokku miljonite failide vĂ”i tĂ€ieliku puudumise korral.

JÀrelsÔna

vmspike vÀlja pakkunud sarnast tulemust andva kÀsu:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

TÄHELEPANU: tĂ€he suurus T on oluline. Kui eksite, saate tĂ€ieliku segaduse: kopeerimise suund muutub.
AitÀh:

  • EttevĂ”te RUVDS.COM toetuse ja vĂ”imaluse eest avaldada oma blogis Habras.
  • Pildi eest TripletConcept. Pilt on vĂ€ga suur ja detailne, saab avada eraldisse aknasse.

P.S. Tehtud vigade suunamine minu postkasti. TÔstan selle eest karma.

Meeskond cp: Ôiged failide ja kaustade kopeerimine *nix'is

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster