
Selles artiklis toome vÀlja mÔned vÀhem tuntud asjad, mis on seotud 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/* /targetParandame 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 âŠâŠ /targetKĂ€sirea pikkusele on piirang, mille saame teada kĂ€suga:
getconf ARG_MAXSaame maksimaalse kÀsirea pikkuse baitides:
2097152VÔi:
xargs --show-limitsSaame 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 /homeJa 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/. /targetNeed, 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
cpkontrollib 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
soovis sarnast tulemust andvat kÀsku:
cp -a -T /source /target
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 toetuse ja vÔimaluse eest avaldada oma blogis Habras.
- Pildi eest . 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.
Allikas: habr.com
