cp meeskond: Ôige kaustade ja failide kopeerimine *nixis

cp meeskond: Ôige kaustade ja failide kopeerimine *nixis

Selles artiklis toome vÀlja mÔned vÀhem tuntud asjad, mis on seotud wildcards kopeerimise, ebaselge kÀitumise kÀsuga cp kopeerimise ning meetodid, mis vÔimaldavad suurte hulga failide korrektset kopeerimist ilma vahelejÀtmiseta ja tÔrgeteta.

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

Esimene mÔte on:

cp /source/* /target

Parandame selle kÀsu:

cp -a /source/* /target

VÔti -a lisab kÔigi atribuutide, Ôiguste ja rekursiooni kopeerimise. Kui tÀpset Ôiguste reprodutseerimist ei ole vajalik, on piisav vÔtme kasutamine -r.

Kopeerimise jĂ€rel avastame, et mitte kĂ”ik failid ei ole kopeeritud — vahele jĂ€id punktiga algavad failid, nĂ€iteks:

.profiil
.kohalik
.mc

ja sellelaadsed.

Kuidas see juhtus?

Sest wildcards töötleb shell (bash tĂŒĂŒpilisel juhul). Vaikimisi ignoreerib bash kĂ”ik punktiga algavad failid, tĂ”lgendades neid kui peidetud. Sellise kĂ€itumise vĂ€ltimiseks peame muutma kĂ€itumist bash selle kĂ€su abil:

shopt -s dotglob

Kuna see kÀitumise muudatus soovite pÀrast taaskÀivitamist sÀilitada, saate teha faili wildcard.sh selle kÀsuga kausta /etc/profile.d (vÔib-olla on teie jaotuses teisene kaust).

Ja kui allika direktoriumis ei ole faile, siis shell ei suuda punktikest asendada ja kopeerimine lĂ”ppeb samuti veaga. Sellise olukorra vastu on valikud failglob ja nullglob. Meil on vaja seadistada failglob, mis ei lase kĂ€sul teostuda. nullglob see ei sobi, kuna see muudab wildcards versiooni, mis ei leidnud vasteid, tĂŒhjaks stringiks (nullpikkuseks), mis cp toob kaasa vea.

Kuid kui kaustas on tuhandeid faile vÔi rohkem, tasub wildcardsi kasutamisest tÀielikult loobuda. Asi on selles, et bash lahendab wildcards vÀga pika kÀsirea, nÀiteks:

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

 /target

KÀsirea pikkusele on piirang, mille saame teada kÀsuga:

getconf ARG_MAX

Saame maksimaalse kÀsirea pikkuse baitides:

2097152

VÔi:

xargs --show-limits

Saame midagi sellist:


.
Maksimaalne pikkus kÀsk, mida me tegelikult kasutada saame: 2089314

.

Nii et jÀtkame wildcardsidest loobumisel.

Kirjutame lihtsalt

cp -a /source /target

Ja siin seisame silmitsi ebaselguse kÀitumisega cp. Kui kausta /target ei eksisteeri, saame, mida vajame.

Kuid kui kaust target eksisteerib, kopeeritakse failid kausta /target/source.

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

Kui kausta allikas ja vastuvÔtja nimetatakse sama, nÀiteks kui kopeerime kaustast /source kausta /home/source, vÔiksime kasutada kÀsku:

cp -a /source /home

Ja pÀrast kopeerimist oleks kaustas /home/source failid tÀiendatud failidega kaustast /source.

Siin on ĂŒks loogiline ĂŒlesanne: me saame tĂ€iendada faile vastuvĂ”tva kausta, kui kaustade nimed on samad, kuid kui need erinevad, siis allikakaust pannakse vastuvĂ”tja sisse. Kuidas kopeerida faile kaustast /source kausta /target kĂ€suga cp ilma wildcards'ita?

Selle kahjuliku piirangu ĂŒletamiseks kasutame mitte ilmselget lahendust:

cp -a /source/. /target

Need, kes tunnevad hĂ€sti DOS-i ja Linuxi, on juba kĂ”ik aru saanud: igas kaustas on 2 nĂ€htamatut kausta «.» ja «..», mis on pseudo-kaustad, mis viitavad vastavalt praegusele ja ĂŒleĂŒldisele kaustale.

  • Kopeerimisel cp kontrollib see olemasolu ja proovib luua /target/.
  • Selline kaust eksisteerib ja see on /target
  • Failid kaustast /source on korralikult kopeeritud kausta /target.

Nii et paneme nĂŒĂŒd endasse tugeva raami mĂ€llu vĂ”i seinale:

cp -a /source/. /target

Selle kĂ€su kĂ€itumine on ĂŒhemĂ”tteline. KĂ”ik töötab vigadeta, olenemata sellest, kas teil on miljon faili vĂ”i neid pole ĂŒldse.

JĂ€reldused

Kui on vajalik kopeerida kĂ”ik faile ĂŒhest kaustast teise, ei kasuta me wildcards'i, parem on kasutada cp koos punktiga allikakausta lĂ”pus. See kopeerib kĂ”ik failid, sealhulgas peidetud ja ei lagune miljonite failide vĂ”i nende tĂ€ieliku puudumise korral.

EessÔna

vmspike soovis sarnast tulemust andvat kÀsku:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

TÄHELEPANU: tĂ€he suurus T on oluline. Kui segate Ă€ra, saate tĂ€ieliku jama: kopeerimise suund muutub.
TĂ€nud:

  • EttevĂ”ttele RUVDS.COM toetuse ja vĂ”imaluse eest avaldada oma blogis Habras.
  • Pildi eest TripletConcept. Pilt on vĂ€ga suur ja detailne, seda saab avada eraldi aknas.

P.S. Tuvastatud vead suunake isikliku sÔnumi kaudu. TÔstame selle eest karmaat.

cp meeskond: Ôige kaustade ja failide kopeerimine *nixis

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster