cp paréntah: nyalin folder file leres ka * nix

cp paréntah: nyalin folder file leres ka * nix

Artikel ieu bakal nembongkeun sababaraha hal non-écés patali pamakéan wildcards nalika nyalin, kabiasaan paréntah ambigu cp nalika nyalin, kitu ogé métode anu ngamungkinkeun anjeun leres nyalin sajumlah ageung file tanpa skipping atanapi nabrak.

Anggap urang kedah nyalin sadayana tina folder / sumber ka folder / target.

Hal kahiji anu datang ka pikiran nyaéta:

cp /source/* /target

Hayu urang langsung ngabenerkeun paréntah ieu:

cp -a /source/* /target

konci -a bakal nambahkeun nyalin sadaya atribut, hak jeung nambahkeun recursion. Nalika réproduksi tepat hak henteu diperlukeun, konci hiji cukup -r.

Saatos nyalin, urang bakal mendakan yén henteu sadayana file disalin - file anu dimimitian ku titik sapertos:

.profile
.local
.mc

jeung sajabana.

Naha ieu kajadian?

Kusabab wildcards diolah ku cangkang (bash dina kasus biasa). Sacara standar, bash bakal malire sadaya file dimimitian ku titik-titik, sabab ngarawatna disumputkeun. Pikeun nyingkahan kabiasaan ieu urang kudu ngarobah kabiasaan bash ngagunakeun paréntah:

shopt -s dotglob

Pikeun mastikeun yén parobahan paripolah ieu tetep saatos reboot, anjeun tiasa nyiptakeun file wildcard.sh nganggo paréntah ieu dina polder. /etc/profile.d (Sugan sebaran anjeun boga folder béda).

Sareng upami henteu aya file dina diréktori sumber, cangkang moal tiasa ngagentos naon waé dina tempat tanda bintang, sareng nyalin ogé bakal gagal sareng kasalahan. Aya pilihan ngalawan kaayaan ieu failglob и nullglob. Urang bakal kedah nyetél failglob, nu bakal nyegah paréntah ti keur dieksekusi. nullglob iyeu moal jalan mun, saprak eta ngarobah string kalawan wildcards nu teu manggihan patandingan kana string kosong (enol panjang), nu keur cp bakal ngabalukarkeun kasalahan.

Nanging, upami aya rébuan file atanapi langkung dina polder, maka pendekatan wildcards kedah ditinggalkeun sadayana. kanyataan éta bash expands wildcards kana garis paréntah pisan panjang kawas:

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

Aya wates dina panjang garis paréntah, anu urang tiasa terang nganggo paréntah:

getconf ARG_MAX

Hayu urang kéngingkeun panjang maksimum garis paréntah dina bait:

2097152

Atanapi:

xargs --show-limits

Urang meunang hal kawas:

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

Janten, hayu urang ngalakukeun tanpa wildcard sadayana.

Hayu urang nulis

cp -a /source /target

Sarta di dieu urang Nyanghareupan ambiguity tina kabiasaan cp. Upami folder / target henteu aya, maka urang bakal nampi naon anu urang peryogikeun.

Nanging, upami folder targét aya, maka file éta bakal disalin kana folder / target / sumber.

Urang teu tiasa salawasna ngahapus folder /target sateuacanna, sabab tiasa ngandung file anu urang peryogikeun sareng tujuan urang, contona, pikeun nambihan file dina /target sareng file tina /sumber.

Upami polder sumber sareng tujuan namina sami, contona, urang nyalin ti / sumber ka / bumi / sumber, maka urang tiasa nganggo paréntah:

cp -a /source /home

Sareng saatos nyalin, file dina /home/source bakal ditambihan ku file tina /source.

Ieu mangrupikeun masalah logis: urang tiasa nambihan file dina diréktori tujuan upami polderna namina sami, tapi upami aranjeunna béda, polder sumber bakal disimpen di jero tujuan. Kumaha nyalin file tina / sumber ka / target nganggo cp tanpa wildcards?

Pikeun ngatasi watesan anu ngabahayakeun ieu, kami nganggo solusi anu teu jelas:

cp -a /source/. /target

Anu wawuh sareng DOS sareng Linux parantos ngartos sadayana: di jero unggal folder aya 2 folder anu teu katingali "." jeung "..", nu mangrupakeun pseudo-polder Tumbu ka directories ayeuna jeung luhur.

  • Nalika nyalin cp mariksa ayana sarta nyoba nyieun /target/.
  • Diréktori sapertos kitu aya sareng éta / target
  • File tina /sumber disalin ka /target leres.

Janten, gantung dina pigura anu kandel dina mémori anjeun atanapi dina témbok:

cp -a /source/. /target

Paripolah paréntah ieu jelas. Sagalana bakal jalan tanpa kasalahan, paduli naha anjeun boga sajuta file atawa euweuh pisan.

papanggihan

Upami anjeun kedah nyalin sadaya file ti hiji polder ka nu sejen, urang teu make wildcards, eta leuwih hade migunakeun eta gantina cp digabungkeun jeung titik dina tungtung folder sumber. Ieu bakal nyalin sadaya file, kalebet anu disumputkeun, sareng moal gagal sareng jutaan file atanapi henteu aya file sama sekali.

afterword

vmspike nyarankeun versi paréntah kalayan hasil anu sami:

cp -a -T /source /target

Oz_Alex

cp -aT /source /target

CATATAN: kasus surat T miboga harti. Upami anjeun nyampur, anjeun bakal nampi sampah lengkep: arah nyalin bakal robih.
hatur nuhun:

  • Perusahaan RUVDS.COM pikeun rojongan tur kasempetan pikeun nyebarkeun on blog anjeun dina Habré.
  • Per gambar Konsep Triple. Gambarna ageung pisan sareng detil, tiasa dibuka dina jandela anu misah.

PS Punten kirimkeun kasalahan anu anjeun perhatikeun dina pesen pribadi. Kuring ningkatkeun karma kuring pikeun ieu.

cp paréntah: nyalin folder file leres ka * nix

sumber: www.habr.com

Tambahkeun komentar