كيفية نسخ مجلد في لينكس باستخدام أمر cp من سطر الأوامر

دقائق القراءة: 5

كيفية نسخ الملفات والمجلدات في لينكس باستخدام cp

يُعد الأمر cp من الأوامر الأساسية في أنظمة التشغيل المبنية على Unix مثل Linux وMacOS. وتتمثل مهمته في نسخ الملفات والمجلدات من موقع إلى آخر عبر سطر الأوامر بسهولة ومرونة. ورغم أن استخدامه يبدو بسيطاً في البداية، فإن سلوكه يختلف قليلاً بحسب ما إذا كنت تنسخ ملفاً أو مجلداً، وكذلك وفق الخيارات التي تضيفها إليه.

إذا أردت الاطلاع على التوثيق الرسمي للأمر cp، يمكنك تشغيل الأمر التالي داخل الطرفية:

$ man cp
NAME
    cp -- copy files

SYNOPSIS
    cp [OPTIONS] source_file target_file
    cp [OPTIONS] source_file ... target_directory

الصيغة الأساسية للأمر تعتمد على تحديد مصدر واحد أو أكثر، ثم الوجهة التي تريد نسخ الملفات أو المجلدات إليها:

cp [OPTIONS] source_file target_file

شرح نسخ المجلدات والملفات في لينكس باستخدام أمر cp من سطر الأوامر

نسخ ملف داخل المجلد الحالي

لنسخ ملف، مرّر اسم الملف الأصلي ثم اسم النسخة الجديدة أو المسار الهدف. على سبيل المثال، إذا كان لديك ملف باسم a.txt وتريد إنشاء نسخة منه باسم b.txt، فاستخدم:

$ ls
a.txt
$ cp a.txt b.txt
$ ls
a.txt b.txt

يعرض الأمر ls محتويات المجلد الحالي. وعند استخدام cp دون تحديد مسار مختلف، فسيتم التعامل مع المجلد الحالي بوصفه الوجهة الافتراضية.

نسخ ملف إلى مجلد آخر

إذا كنت تريد نسخ ملف إلى مجلد مختلف عن موقعك الحالي، فما عليك إلا تمرير مسار ذلك المجلد بوصفه الوجهة:

$ ls ../directory-1/
$ cp a.txt ../directory-1/
$ ls ../directory-1/
a.txt

في هذا المثال، تم نسخ الملف a.txt إلى المجلد directory-1. وبشكل افتراضي، يحتفظ الملف المنسوخ باسمه الأصلي. لكن يمكنك أيضاً تغيير اسمه أثناء النسخ:

$ cp a.txt ../directory-1/b.txt
$ ls ../directory-1/
b.txt

نسخ عدة ملفات دفعة واحدة

يسمح لك الأمر cp بنسخ أكثر من ملف في عملية واحدة، وذلك عبر تمرير عدة مصادر ثم تحديد مجلد الوجهة في النهاية:

$ ls ../directory-1/
$ cp first.txt second.txt ../directory-1/
$ ls ../directory-1/
first.txt second.txt

هنا تم نسخ الملفين first.txt وsecond.txt إلى المجلد directory-1.

  • عند تمرير أكثر من مصدر، يجب أن يكون الوسيط الأخير مجلداً.
  • إذا لم تكن الوجهة مجلداً في هذه الحالة، فسيؤدي ذلك إلى خطأ في التنفيذ.

كيفية نسخ مجلد إلى مجلد آخر

إذا حاولت تمرير مجلد مباشرة إلى الأمر cp دون أي خيار إضافي، فستظهر رسالة خطأ لأن الأمر لا ينسخ المجلدات افتراضياً بالطريقة نفسها التي ينسخ بها الملفات:

$ cp directory-1 directory-2
cp: directory-1 is a directory (not copied).

لحل هذه المشكلة، يجب استخدام الخيار -r أو -R، وهو اختصار للنسخ التكراري --recursive:

$ ls directory-1
a.txt
$ cp -r directory-1 directory-2
$ ls
directory-1 directory-2
$ ls directory-2
a.txt

في هذا المثال، تم نسخ المجلد directory-1 بما يحتويه من ملفات إلى مجلد جديد باسم directory-2.

الفرق بين نسخ المجلد بالكامل ونسخ محتوياته فقط

توجد حالة مهمة ينبغي الانتباه إليها عند نسخ المجلدات. فإذا كانت الوجهة موجودة مسبقاً، يمكنك التحكم فيما إذا كنت تريد نسخ المجلد نفسه أو محتوياته فقط، وذلك من خلال إضافة الشرطة المائلة النهائية / أو حذفها من المصدر.

وفقاً لسلوك الخيار -R، إذا انتهى المسار المصدر بعلامة /، فسيتم نسخ محتويات المجلد فقط، أما إذا لم تنتهِ بها، فسيتم نسخ المجلد نفسه بما يحتويه.

نسخ المجلد نفسه داخل مجلد موجود

$ ls
directory-1 directory-2
$ ls directory-2
$ cp -r directory-1 directory-2
$ ls directory-2
directory-1
$ ls directory-2/directory-1
a.txt

بما أن المجلد directory-2 موجود بالفعل، ولأن المصدر directory-1 لم ينتهِ بعلامة /، فقد تم نسخ المجلد نفسه داخل الوجهة.

نسخ محتويات المجلد فقط

إذا كنت تريد نقل الملفات والمجلدات الفرعية الموجودة داخل directory-1 إلى directory-2 مباشرة، فأضف / في نهاية المصدر، مثل directory-1/.

منع استبدال الملفات الموجودة عند النسخ

بشكل افتراضي، يقوم الأمر cp باستبدال الملف الموجود في الوجهة إذا كان يحمل الاسم نفسه. وقد يكون ذلك غير مرغوب فيه عند التعامل مع ملفات مهمة.

$ cat a.txt
A
$ cat directory-1/a.txt
B
$ cp a.txt directory-1/a.txt
$ cat directory-1/a.txt
A

يستخدم الأمر cat لعرض محتوى الملف، ومن المثال السابق نلاحظ أن الملف الموجود في الوجهة تم استبداله بالكامل.

استخدام الخيار التفاعلي -i

إذا أردت أن يطلب منك النظام تأكيداً قبل الاستبدال، فاستخدم الخيار -i أو --interactive:

$ cp -i a.txt directory-1/a.txt
overwrite directory-1/a.txt? (y/n [n])

هذا الخيار مناسب عندما تعمل يدوياً وتريد تقليل احتمال فقدان البيانات.

استخدام الخيار -n لمنع الاستبدال نهائياً

إذا كنت تريد تجاهل الملفات الموجودة مسبقاً دون ظهور رسالة تأكيد، فاستخدم الخيار -n أو --no-clobber:

$ cat a.txt
A
$ cat directory-1/a.txt
B
$ cp -n a.txt directory-1/a.txt
$ cat directory-1/a.txt
B

في هذا المثال، لم يتم استبدال محتوى الملف الموجود في الوجهة بفضل الخيار -n.

خيارات مفيدة أخرى في أمر cp

إلى جانب الخيارات السابقة، يدعم الأمر cp مجموعة من المعاملات المفيدة التي تجعل العمل أكثر وضوحاً ومرونة:

  • -v: عرض تفاصيل الملفات أثناء النسخ بصيغة verbose.
  • -f: فرض النسخ في بعض الحالات عبر الخيار force.
  • -R أو -r: نسخ المجلدات ومحتوياتها بشكل تكراري.
  • -i: طلب تأكيد قبل الاستبدال.
  • -n: منع استبدال الملفات الموجودة.

من الجيد مراجعة صفحة الدليل عبر الأمر man cp للتعرف إلى جميع الخيارات المتاحة بحسب التوزيعة أو النظام المستخدم.

أفضل ممارسات عند نسخ المجلدات في لينكس

  1. تأكد دائماً من مسار المصدر والوجهة قبل تنفيذ الأمر.
  2. استخدم -i عند العمل على ملفات حساسة لتجنب الاستبدال غير المقصود.
  3. استخدم -n في السكربتات عندما تريد الحفاظ على الملفات الموجودة.
  4. افهم الفرق بين directory وdirectory/ قبل نسخ المجلدات إلى وجهة موجودة مسبقاً.
  5. جرّب الأمر أولاً على ملفات اختبارية إذا كنت غير متأكد من النتيجة.

الخلاصة التقنية

يُعد الأمر cp أداة أساسية لا غنى عنها في إدارة الملفات على أنظمة Linux وUnix وMacOS. ورغم بساطة تركيبه، فإن فهم الفروق الدقيقة بين نسخ ملف، ونسخ مجلد، ونسخ المحتوى فقط، يمنحك تحكماً أكبر ويقلل من الأخطاء الشائعة. إذا أتقنت استخدام الخيارات مثل -r و-i و-n، فستتمكن من تنفيذ عمليات النسخ بكفاءة وأمان أعلى داخل بيئة سطر الأوامر.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *