cp کمانډ: په سمه توګه د فایل فولډر په *nix کې کاپي کول

cp کمانډ: په سمه توګه د فایل فولډر په *nix کې کاپي کول

دا مقاله به د کارولو پورې اړوند ځینې غیر څرګند شیان ښکاره کړي وائلډ کارډونه کله چې کاپي کول، د مبهم کمانډ چلند cp کله چې کاپي کول ، په بیله بیا هغه میتودونه چې تاسو ته اجازه درکوي په سمه توګه د لوی شمیر فایلونو کاپي کولو یا خرابیدو پرته کاپي کړئ.

راځئ چې ووایو موږ اړتیا لرو هر څه د / سرچینې فولډر څخه / هدف فولډر ته کاپي کړو.

لومړی شی چې ذهن ته راځي دا دي:

cp /source/* /target

راځئ چې سمدلاسه دا کمانډ سم کړو:

cp -a /source/* /target

کیلي -a د ټولو صفاتو، حقونو کاپي کول به اضافه کړي او تکرار اضافه کړي. کله چې د حقونو دقیق تکثیر ته اړتیا نه وي، یوه کلیمه کافي ده -r.

د کاپي کولو وروسته، موږ به ومومئ چې ټولې فایلونه کاپي شوي ندي - فایلونه چې د نقطې سره پیل کیږي لکه:

.profile
.local
.mc

او داسې نور.

ولې داسې وشول؟

ځکه چې وائلډ کارډونه د شیل لخوا پروسس کیږي (bash په یوه عادي قضیه کې). د ډیفالټ په توګه، bash به ټولې فایلونه له پامه غورځوي چې د نقطو سره پیل کیږي، ځکه چې دا د پټ په توګه چلند کوي. د دې چلند د مخنیوي لپاره موږ باید چلند بدل کړو bash د کمانډ په کارولو سره:

shopt -s dotglob

د دې لپاره چې ډاډ ترلاسه شي چې دا چلند بدلون د ریبوټ وروسته دوام لري، تاسو کولی شئ په فولډر کې د دې کمانډ سره د wildcard.sh فایل جوړ کړئ /etc/profile.d (شاید ستاسو توزیع مختلف فولډر ولري).

او که چیرې د سرچینې ډایرکټر کې فایلونه شتون ونلري ، نو شیل به د ستوري په ځای کې هیڅ شی ځای په ځای نه کړي ، او کاپي کول به هم د غلطۍ سره ناکام شي. د دې وضعیت په وړاندې اختیارونه شتون لري failglob и nullglob. موږ باید تنظیم کړو failglob، کوم چې به د امر د اجرا کیدو مخه ونیسي. nullglob دا به کار ونکړي، ځکه چې دا یو تار د وائلډ کارډونو سره بدلوي چې یو میچ یې په خالي تار (صفر اوږدوالی) کې ندی موندلی، د کوم لپاره cp د تېروتنې لامل شي.

په هرصورت، که چیرې په فولډر کې زرګونه فایلونه یا نور شتون ولري، نو د وائلډ کارډ طریقه باید په بشپړه توګه پریښودل شي. حقیقت دا دی bash وائلډ کارډونه په خورا اوږد کمانډ لاین کې پراخوي لکه:

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

د کمانډ لاین په اوږدوالي یو حد شتون لري، کوم چې موږ کولی شو د کمانډ په کارولو سره ومومئ:

getconf ARG_MAX

راځئ چې په بایټس کې د کمانډ لاین اعظمي اوږدوالی ترلاسه کړو:

2097152

یا:

xargs --show-limits

موږ یو څه ترلاسه کوو لکه:

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

نو، راځئ چې په بشپړه توګه د وائلډ کارډونو پرته ترسره کړو.

راځئ چې یوازې لیکو

cp -a /source /target

او دلته موږ د چلند له ابهام سره مخ یو cp. که د هدف فولډر شتون ونلري، نو موږ به هغه څه ترلاسه کړو چې موږ ورته اړتیا لرو.

که څه هم، که د هدف فولډر شتون ولري، نو بیا به فایلونه /target/source فولډر ته کاپي شي.

موږ تل نشو کولی د /target فولډر مخکې له مخکې حذف کړو، ځکه چې دا کیدای شي هغه فایلونه ولري چې موږ ورته اړتیا لرو او زموږ هدف، د بیلګې په توګه، د / سرچینې څخه د فایلونو سره په هدف کې د فایلونو ضمیمه کول دي.

که د سرچینې او منزل فولډر ورته نومول شوي وي، د بیلګې په توګه، موږ د / سرچینې څخه / کور / سرچینې ته کاپي کوو، نو موږ کولی شو کمانډ وکاروو:

cp -a /source /home

او د کاپي کولو وروسته، په / کور / سرچینې کې فایلونه به د / سرچینې څخه فایلونو سره ضمیمه شي.

دا یوه منطقي ستونزه ده: موږ کولی شو فایلونه د منزل په لارښود کې اضافه کړو که چیرې فولډر ورته نوم ورکړل شي، مګر که دوی مختلف وي، نو د سرچینې فولډر به د منزل دننه کېښودل شي. څنګه د وائلډ کارډونو پرته د cp په کارولو سره فایلونه / سرچینې څخه / هدف ته کاپي کړئ؟

د دې زیان رسونکي محدودیت شاوخوا ترلاسه کولو لپاره، موږ یو غیر څرګند حل کاروو:

cp -a /source/. /target

هغه کسان چې د DOS او لینکس سره بلد دي لا دمخه په هرڅه پوهیدلي دي: په هر فولډر کې 2 پټ فولډر شتون لري "." او ".."، کوم چې د اوسني او لوړو لارښودونو سره د سیډو فولډر لینکونه دي.

  • کله چې کاپي کول cp د شتون لپاره چک کوي او هڅه کوي چې /target/ جوړ کړي.
  • دا ډول لارښود شتون لري او دا / هدف دی
  • د / سرچینې څخه فایلونه په سمه توګه / هدف ته کاپي شوي.

نو، دا په خپل حافظه یا دیوال کې په زړور چوکاټ کې ځړول:

cp -a /source/. /target

د دې امر چلند روښانه دی. هرڅه به پرته له خطا کار وکړي ، پرته لدې چې تاسو یو ملیون فایلونه لرئ یا هیڅ نه.

موندنو

که تاسو اړتیا لرئ کاپي کړئ ټول له یوه فولډر څخه بل ته فایلونه، موږ وائلډ کارډونه نه کاروو، دا غوره ده چې د دوی پرځای یې وکاروئ cp د سرچینې فولډر په پای کې د یوې مودې سره یوځای شوی. دا به ټولې فایلونه کاپي کړي ، پشمول د پټو فایلونو ، او په ملیونونو فایلونو یا هیڅ فایلونو سره به ناکام نشي.

وروسته

vmspike د ورته پایلې سره د کمانډ نسخه وړاندیز وکړ:

cp -a -T /source /target

اوز_الیکس

cp -aT /source /target

یادونه: د لیک قضیه T مانا لري. که تاسو دا ګډ کړئ، تاسو به بشپړ کثافات ترلاسه کړئ: د کاپي کولو لار به بدل شي.
مننه:

  • شرکتونه RUVDS.COM د ملاتړ او فرصت لپاره ستاسو په بلاګ کې په Habré کې خپور کړئ.
  • په عکس کې درې اړخیز مفهوم. انځور خورا لوی او مفصل دی، په جلا کړکۍ کې پرانستل کیدی شي.

PS مهرباني وکړئ په شخصي پیغام کې کومې تېروتنې چې تاسو یې ګورئ واستوئ. زه د دې لپاره خپل کار زیاتوم.

cp کمانډ: په سمه توګه د فایل فولډر په *nix کې کاپي کول

سرچینه: www.habr.com

Add a comment