cp کمانڈ: فائل فولڈرز کو * نکس میں صحیح طریقے سے کاپی کرنا

cp کمانڈ: فائل فولڈرز کو * نکس میں صحیح طریقے سے کاپی کرنا

یہ مضمون کچھ غیر واضح چیزوں کے استعمال سے متعلق ظاہر کرے گا۔ وائلڈ کارڈ کاپی کرتے وقت، مبہم کمانڈ کا رویہ cp کاپی کرتے وقت، اور ساتھ ہی ایسے طریقے جو آپ کو فائلوں کی ایک بڑی تعداد کو چھپے یا کریش کیے بغیر صحیح طریقے سے کاپی کرنے کی اجازت دیتے ہیں۔

ہم کہتے ہیں کہ ہمیں ہر چیز کو /source فولڈر سے /target فولڈر میں کاپی کرنے کی ضرورت ہے۔

پہلی چیز جو ذہن میں آتی ہے وہ ہے:

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 سے فائلوں کے ساتھ مکمل کرنا ہے۔

اگر ماخذ اور منزل کے فولڈرز کا نام ایک ہی رکھا گیا تھا، مثال کے طور پر، ہم /source سے /home/source میں کاپی کر رہے تھے، پھر ہم کمانڈ استعمال کر سکتے ہیں:

cp -a /source /home

اور کاپی کرنے کے بعد، /home/source میں موجود فائلوں کو /source کی فائلوں کے ساتھ ضمیمہ کیا جائے گا۔

یہ ایک منطقی مسئلہ ہے: اگر فولڈرز کا نام ایک ہی ہے تو ہم منزل کی ڈائریکٹری میں فائلیں شامل کر سکتے ہیں، لیکن اگر وہ مختلف ہیں، تو سورس فولڈر کو منزل کے اندر رکھا جائے گا۔ وائلڈ کارڈ کے بغیر cp کا استعمال کرتے ہوئے فائلوں کو /source سے /target میں کیسے کاپی کریں؟

اس نقصان دہ حد کو حاصل کرنے کے لیے، ہم ایک غیر واضح حل استعمال کرتے ہیں:

cp -a /source/. /target

جو لوگ DOS اور Linux سے واقف ہیں وہ پہلے ہی سب کچھ سمجھ چکے ہیں: ہر فولڈر کے اندر 2 پوشیدہ فولڈر ہوتے ہیں۔ اور ".."، جو کہ موجودہ اور اعلیٰ ڈائریکٹریوں کے لیے سیوڈو فولڈر لنکس ہیں۔

  • نقل کرتے وقت cp وجود کی جانچ کرتا ہے اور /target/ بنانے کی کوشش کرتا ہے۔
  • ایسی ڈائرکٹری موجود ہے اور یہ /target ہے۔
  • /ذریعہ سے فائلوں کو /ٹارگٹ پر صحیح طریقے سے کاپی کیا جاتا ہے۔

لہذا، اسے اپنی یادداشت میں یا دیوار پر ایک بولڈ فریم میں لٹکا دیں:

cp -a /source/. /target

اس حکم کا طرز عمل واضح ہے۔ ہر چیز غلطیوں کے بغیر کام کرے گی، قطع نظر اس کے کہ آپ کے پاس ایک ملین فائلیں ہیں یا کوئی بھی نہیں۔

نتائج

اگر آپ کو کاپی کرنے کی ضرورت ہے۔ تمام ایک فولڈر سے دوسرے فولڈر میں فائلیں، ہم وائلڈ کارڈ استعمال نہیں کرتے، اس کی بجائے ان کا استعمال کرنا بہتر ہے۔ cp سورس فولڈر کے آخر میں ایک مدت کے ساتھ مل کر۔ یہ چھپی ہوئی فائلوں سمیت تمام فائلوں کو کاپی کرے گا، اور لاکھوں فائلوں یا کسی بھی فائل کے ساتھ ناکام نہیں ہوگا۔

بعد میں

vmspike اسی طرح کے نتیجے کے ساتھ کمانڈ ورژن تجویز کیا:

cp -a -T /source /target

اوز_ایلکس

cp -aT /source /target

نوٹ: خط کیس T معنی رکھتا ہے. اگر آپ اسے ملا دیتے ہیں تو آپ کو مکمل کوڑا کرکٹ مل جائے گا: نقل کرنے کی سمت بدل جائے گی۔
اعترافات:

  • کمپنیاں۔ RUVDS.COM حمایت اور Habré پر اپنے بلاگ پر شائع کرنے کے موقع کے لیے۔
  • فی تصویر ٹرپل تصور. تصویر بہت بڑی اور تفصیلی ہے، ایک علیحدہ ونڈو میں کھولی جا سکتی ہے۔

PS براہ کرم نجی پیغام میں آپ کی نظر آنے والی کوئی بھی غلطی بھیجیں۔ میں اس کے لیے اپنا کرما بڑھاتا ہوں۔

cp کمانڈ: فائل فولڈرز کو * نکس میں صحیح طریقے سے کاپی کرنا

ماخذ: www.habr.com

نیا تبصرہ شامل کریں