نسخ الأشياء
تستطيع صنع الملفات والمجلدات من الصفر. لكن غالبًا ما تريده حقًّا هو نسخة مكرّرة من شيء موجود بالفعل — نسخة احتياطية قبل تغيير ملف إعدادات، أو نسخة من قالب لبدء مشروع جديد منه، أو لقطة من ملاحظات اليوم.
الأمر هو cp — اختصارًا لـ copy.
نسخ ملف
الشكل دائمًا نفسه: cp المصدر الوجهة.
اصنع ملف اختبار:
echo "first draft" > draft.txt
الآن انسخه:
cp draft.txt draft-backup.txt
شغّل ls. الآن لديك كلاهما — draft.txt (الأصل) و draft-backup.txt (النسخة المطابقة).
يبدآن متماثلين لكنهما الآن مستقلّان. غيّر أحدهما ولن يتحرّك الآخر.
النسخ إلى داخل مجلد
إن كانت الوجهة مجلدًا موجودًا، يُنسخ الملف داخل ذلك المجلد، محتفظًا باسمه الأصلي:
mkdir backups
cp draft.txt backups
الآن يُظهر ls backups الملف draft.txt. لقد نقلت نسخة إلى داخل المجلد من دون إعادة تسميتها.
يمكنك فعل الأمرين معًا — النسخ إلى داخل مجلد و إعطاؤه اسمًا جديدًا:
cp draft.txt backups/draft-2026-01-01.txt
الفخّ عند نسخ مجلد
جرّب هذا:
cp backups archive
يرفض الـ terminal:
cp: backups is a directory (not copied).
افتراضيًا، ينسخ cp الملفات فقط. المجلدات محظورة — لأنّ نسخ مجلد يعني سرًّا نسخ كلّ ما
بداخله، وذلك يُحتمل أن يكون كمًّا كبيرًا من البيانات لا يريد الـ terminal فعله من دون أن تقول ذلك.
الحلّ: -r
أضِف -r (اختصارًا لـ recursive — بمعنى «وكلّ ما بالداخل، وكلّ ما بداخل ذلك،
وصولًا إلى النهاية»):
cp -r backups archive
الآن لديك مجلد archive نسخة مطابقة من backups، بما في ذلك كلّ ملف بداخله. هذا هو الـ flag
الوحيد الذي ستضيفه إلى cp في معظم الأيام.
نسخ عدّة ملفات دفعة واحدة
تريد وضع مجموعة من الملفات في مجلد واحد؟ اسردها كلّها، مع الوجهة في النهاية:
cp draft.txt notes.txt todo.txt backups/
علامة / اللاحقة في backups/ عادة صغيرة تستحقّ التبنّي — تجعل نيّتك واضحة («أقصد المجلد، لا
ملفًا بذلك الاسم») وسينبّهك الـ terminal إن كان المجلد غير موجود.
footgun
تمامًا مثل > في الـ redirect، فإنّ cp يكتب فوق بصمت. إن كان backups/draft.txt
موجودًا بالفعل، تستبدله النسخة. بلا تحذير.
إن أردت تنبيهًا قبل الكتابة فوقه، فاستخدم -i (اختصارًا لـ interactive):
cp -i draft.txt backups/
سيطلب التأكيد قبل الكتابة فوق أيّ شيء. أبطأ، وأكثر أمانًا — مفيد عند النسخ إلى مجلدات تهتمّ بها.
ما الذي تعلّمته
cp source dest— انسخ ملفًا.cp -r source dest— انسخ مجلدًا وكلّ ما بداخله.cp file1 file2 file3 folder/— انسخ عدّة ملفات إلى مجلد.cp -i ...— اسأل قبل الكتابة فوق.
التالي: النقل وإعادة التسمية. (تنبيه مسبق: في الـ terminal، هما العملية نفسها.)