cp ڪمانڊ: فائل فولڊر کي صحيح طور تي نقل ڪندي * نڪس

cp ڪمانڊ: فائل فولڊر کي صحيح طور تي نقل ڪندي * نڪس

هي آرٽيڪل ڪجهه غير واضع شين جي استعمال سان لاڳاپيل ظاهر ڪندو وائلڊ ڪارڊ جڏهن نقل، مبهم حڪم رويي 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 فولڊر موجود نه آهي، ته اسان حاصل ڪنداسين جيڪو اسان کي گهربل آهي.

بهرحال، جيڪڏهن ٽارگيٽ فولڊر موجود آهي، ته فائلون نقل ڪيون وينديون /target/source فولڊر.

اسان هميشه /target فولڊر کي اڳ ۾ ئي حذف نٿا ڪري سگهون، ڇاڪاڻ ته ان ۾ شايد فائلون شامل هجن جن جي اسان کي ضرورت آهي ۽ اسان جو مقصد، مثال طور، /target ۾ فائلن کي /ذريعو مان فائلن سان گڏ ڪرڻ آهي.

جيڪڏهن ماخذ ۽ منزل فولڊر ساڳيا نالا رکيا ويا، مثال طور، اسان نقل ڪري رهيا هئاسين /source کان /home/source ڏانهن، پوءِ اسان حڪم استعمال ڪري سگهون ٿا:

cp -a /source /home

۽ ڪاپي ڪرڻ کان پوءِ، /home/source ۾ فائلون /source کان فائلن سان گڏ ٿينديون.

هي هڪ منطقي مسئلو آهي: اسان فائلون شامل ڪري سگھون ٿا منزل ڊاريڪٽري ۾ جيڪڏهن فولڊرن جا نالا ساڳيا آهن، پر جيڪڏهن اهي مختلف آهن ته پوءِ ماخذ فولڊر منزل جي اندر رکيا ويندا. وائلڊ ڪارڊ کان سواءِ cp استعمال ڪندي فائلن کي /source کان /target تائين ڪيئن نقل ڪجي؟

هن نقصانڪار حد جي چوڌاري حاصل ڪرڻ لاء، اسان هڪ غير واضح حل استعمال ڪندا آهيون:

cp -a /source/. /target

جيڪي DOS ۽ Linux کان واقف آهن اهي پهريان ئي سڀ ڪجهه سمجهي چڪا آهن: هر فولڊر اندر 2 پوشیدہ فولڊر آهن "." ۽ ".."، جيڪي pseudo-folders آهن لنڪ موجوده ۽ اعلي ڊائريڪٽرن سان.

  • جڏهن نقل cp وجود جي جانچ ڪري ٿو ۽ ٺاهڻ جي ڪوشش ڪري ٿو /target/.
  • اهڙي ڊاريڪٽري موجود آهي ۽ اها آهي /target
  • فائلون /ذريعو کان نقل ڪيون ويون آهن /هدف تي صحيح.

تنهن ڪري، ان کي توهان جي يادگيري ۾ هڪ باهمي فريم ۾ يا ڀت تي پھان ٿو:

cp -a /source/. /target

هن حڪم جي رويي واضح آهي. هر شي ڪم ڪندو بغير ڪنهن غلطي جي، قطع نظر ته توهان وٽ هڪ ملين فائلون آهن يا ڪجهه به نه.

پهچڻ

جيڪڏهن توهان کي نقل ڪرڻ جي ضرورت آهي سڀ ڪجهه فائلون هڪ فولڊر کان ٻئي فولڊر ۾، اسان وائلڊ ڪارڊ استعمال نٿا ڪريون، اهو بهتر آهي ته انهن جي بدران استعمال ڪريو cp ماخذ فولڊر جي آخر ۾ مدت سان گڏ. اهو سڀني فائلن کي نقل ڪندو، بشمول لڪيل فائلون، ۽ لکين فائلن سان ناڪام نه ٿينديون يا ڪا به فائل نه هوندي.

پوء

vmspike تجويز ڪيل هڪ ڪمانڊ ورزن ساڳئي نتيجن سان:

cp -a -T /source /target

اوز_الڪس

cp -aT /source /target

نوٽ: خط ڪيس T معنيٰ رکي ٿو. جيڪڏهن توهان ان کي گڏ ڪيو، توهان کي مڪمل گندگي ملي ويندي: نقل ڪرڻ جي هدايت تبديل ٿي ويندي.
مهرباني:

  • ڪمپنيون RUVDS.COM مدد لاءِ ۽ توهان جي بلاگ تي Habré تي شايع ڪرڻ جو موقعو.
  • في تصوير ٽرپل تصور. تصوير تمام وڏي ۽ تفصيلي آهي، هڪ الڳ ونڊو ۾ کولي سگهجي ٿو.

پي ايس مهرباني ڪري ذاتي پيغام ۾ جيڪي به غلطيون توهان کي نظر اچن ٿا موڪليو. مان ھن لاءِ پنھنجو ڪم وڌائيندس.

cp ڪمانڊ: فائل فولڊر کي صحيح طور تي نقل ڪندي * نڪس

جو ذريعو: www.habr.com

تبصرو شامل ڪريو