cp command: husto nga pagkopya sa mga file folder sa *nix

cp command: husto nga pagkopya sa mga file folder sa *nix

Kini nga artikulo magpadayag sa pipila ka dili klaro nga mga butang nga may kalabutan sa paggamit sa mga wildcard kung nagkopya, dili klaro nga pamatasan sa pagmando cp kung nagkopya, ingon man mga pamaagi nga nagtugot kanimo sa husto nga pagkopya sa daghang mga file nga wala’y paglaktaw o pag-crash.

Ingnon ta nga kinahanglan natong kopyahon ang tanan gikan sa / source folder ngadto sa / target folder.

Ang unang butang nga mosantup sa hunahuna mao ang:

cp /source/* /target

Itul-id dayon nato kini nga sugo sa:

cp -a /source/* /target

Key -a idugang ang pagkopya sa tanan nga mga hiyas, katungod ug idugang ang recursion. Kung dili kinahanglan ang eksaktong pagkopya sa mga katungod, igo na ang usa ka yawe -r.

Human sa pagkopya, atong makita nga dili tanan nga mga file gikopya - mga file nga nagsugod sa usa ka tulbok sama sa:

.profile
.local
.mc

ug ang sama.

Nganong nahitabo kini?

Tungod kay ang mga wildcard giproseso sa kabhang (bash sa usa ka tipikal nga kaso). Sa kasagaran, ang bash dili magtagad sa tanan nga mga file nga nagsugod sa mga tuldok, tungod kay kini nagtratar kanila nga gitago. Aron malikayan kini nga pamatasan kinahanglan naton nga usbon ang pamatasan bash gamit ang command:

shopt -s dotglob

Aron masiguro nga kini nga pagbag-o sa pamatasan magpadayon pagkahuman sa pag-reboot, mahimo ka maghimo usa ka wildcard.sh file nga adunay kini nga mando sa folder /etc/profile.d (Tingali ang imong pag-apod-apod adunay lahi nga folder).

Ug kung walay mga file sa tinubdan nga direktoryo, ang kabhang dili makahimo sa pag-ilis sa bisan unsa sa dapit sa asterisk, ug ang pagkopya mapakyas usab sa usa ka sayup. Adunay mga kapilian batok niini nga sitwasyon failglob ΠΈ nullglob. Kinahanglan natong itakda failglob, nga makapugong sa sugo nga ipatuman. nullglob dili molihok, tungod kay kini nag-convert sa usa ka hilo nga adunay mga wildcard nga wala makit-an ang usa ka tugma ngadto sa usa ka walay sulod nga pisi (zero ang gitas-on), nga alang sa cp magpahinabog sayop.

Bisan pa, kung adunay libu-libo nga mga file o daghan pa sa folder, nan ang pamaagi sa wildcard kinahanglan nga biyaan sa hingpit. Ang kamatuoran mao kana bash nagpalapad sa mga wildcard ngadto sa taas kaayo nga command line sama sa:

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

Adunay limitasyon sa gitas-on sa command line, nga atong mahibal-an gamit ang command:

getconf ARG_MAX

Atong makuha ang pinakataas nga gitas-on sa command line sa bytes:

2097152

O:

xargs --show-limits

Atong makuha ang usa ka butang sama sa:

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

Busa, buhaton nato nga walay mga wildcard sa hingpit.

Magsuwat na lang ta

cp -a /source /target

Ug dinhi kita nag-atubang sa dili klaro nga pamatasan cp. Kung wala ang / target nga folder, nan makuha namon ang among kinahanglan.

Bisan pa, kung ang target nga folder anaa, nan ang mga file makopya sa /target/source folder.

Dili namo kanunay nga papason ang /target nga folder nga abante, tungod kay kini mahimong adunay mga file nga among gikinahanglan ug ang among tumong, pananglitan, mao ang pagdugang sa mga file sa /target sa mga file gikan sa /source.

Kung parehas ang ngalan sa gigikanan ug destinasyon nga mga folder, pananglitan, nagkopya kami gikan sa / gigikanan sa / balay / gigikanan, nan mahimo namon gamiton ang mando:

cp -a /source /home

Ug pagkahuman sa pagkopya, ang mga file sa /home/source madugangan sa mga file gikan sa /source.

Kini usa ka lohikal nga problema: mahimo namon nga idugang ang mga file sa direktoryo sa destinasyon kung parehas ang ngalan sa mga folder, apan kung lahi kini, nan ang gigikanan nga folder ibutang sa sulod sa destinasyon. Giunsa pagkopya ang mga file gikan sa / gigikanan hangtod / target gamit ang cp nga wala mga wildcard?

Aron malikayan kining makadaot nga limitasyon, mogamit mi og dili klaro nga solusyon:

cp -a /source/. /target

Kadtong pamilyar sa DOS ug Linux nakasabut na sa tanan: sa sulod sa matag folder adunay 2 nga dili makita nga mga folder "." ug "..", nga mga pseudo-folder nga mga link sa karon ug mas taas nga mga direktoryo.

  • Sa pagkopya cp nagsusi sa paglungtad ug naningkamot sa paghimo sa /target/.
  • Ang ingon nga direktoryo anaa ug kini mao ang /target
  • Ang mga file gikan sa / tinubdan gikopya sa / target sa husto.

Busa, ibitay kini sa usa ka maisugon nga bayanan sa imong panumduman o sa bungbong:

cp -a /source/. /target

Ang kinaiya niini nga sugo klaro. Ang tanan molihok nga wala’y mga sayup, bisan kung adunay ka milyon nga mga file o wala gyud.

kaplag

Kung kinahanglan nimo kopyahon sa tanan nga mga mga file gikan sa usa ka folder ngadto sa lain, wala kami mogamit mga wildcard, mas maayo nga gamiton kini cp inubanan sa usa ka yugto sa katapusan sa gigikanan nga folder. Kopyahon niini ang tanan nga mga file, lakip ang mga tinago, ug dili mapakyas sa milyon-milyon nga mga file o wala’y mga file.

Pagkahuman

vmspike gisugyot ang usa ka bersyon sa mando nga adunay parehas nga sangputanan:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

NOTE: letter case T adunay kahulogan. Kung isagol nimo kini, makuha nimo ang hingpit nga basura: ang direksyon sa pagkopya mausab.
Salamat:

  • Mga kompanya RUVDS.COM alang sa suporta ug oportunidad sa pagmantala sa imong blog sa HabrΓ©.
  • Kada hulagway Triple nga Konsepto. Ang hulagway dako kaayo ug detalyado, mahimong maablihan sa lain nga bintana.

PS Palihug ipadala ang bisan unsang mga sayup nga imong namatikdan sa usa ka pribado nga mensahe. Nadugangan ko ang akong karma niini.

cp command: husto nga pagkopya sa mga file folder sa *nix

Source: www.habr.com

Idugang sa usa ka comment