1) ما هو أمر cp ولماذا نستخدمه؟
أمر cp اختصار لـ Copy
ووظيفته: نسخ الملفات والمجلدات من مكان إلى مكان.
تستخدمه عندما تريد:
- أخذ نسخة احتياطية من ملف قبل التعديل
- نسخ ملفات إلى مجلد مشروع
- نسخ مجلد كامل بمحتوياته
- نقل ملفات متعددة دفعة واحدة (نسخ وليس نقل)
- الحفاظ على الصلاحيات والأوقات الأصلية أثناء النسخ
الفرق بينه وبين
mv:cpينسخ ويترك الأصل، أماmvينقل/يعيد تسمية ويزيل الأصل من مكانه.
2) الصيغة العامة (Syntax)
نسخ ملف إلى ملف (مع تغيير الاسم أو نفس الاسم بمكان آخر)
cp [OPTIONS] SOURCE DESTBashنسخ عدة ملفات إلى مجلد
cp [OPTIONS] SOURCE1 SOURCE2 ... DIRECTORY/Bash3) نسخ ملف واحد (أبسط مثال)
أ) نسخ ملف مع اسم جديد
cd ~/project
touch sample.txt
cp sample.txt copy_of_sample.txtBashتحقق:
ls -lBashب) نسخ ملف إلى مجلد
mkdir -p backup
cp sample.txt backup/Bashهنا سيصبح الملف داخل
backupبنفس الاسم.
تحقق:
ls -l backupBash4) نسخ عدة ملفات دفعة واحدة
لازم يكون “الوجهة الأخيرة” مجلد:
cd ~/project
touch file1.txt file2.txt
mkdir -p dir1
cp file1.txt file2.txt dir1/Bashتحقق:
ls -l dir1Bash5) نسخ مجلد (مهم جدًا): -r أو -R
أ) نسخ مجلد كامل بمحتوياته
cd ~/project
mkdir -p dirA
touch dirA/a.txt
cp -r dirA dirBBashتحقق:
ls -R dirBBashبدون
-rسيظهر خطأ لأنcpلا ينسخ المجلدات افتراضيًا.
6) انتبه: الفرق بين نسخ “المجلد نفسه” ونسخ “محتواه”
هذه نقطة يقع فيها كثير مبتدئين.
أ) نسخ المجلد نفسه (ينشئ مجلد جديد)
cp -r dirA dirBBashالنتيجة:
dirB/يحتوي نفس محتوىdirA/
ب) نسخ محتوى المجلد فقط إلى مجلد موجود
إذا كان dirB موجودًا:
mkdir -p dirB
cp -r dirA/* dirB/Bashهذا ينسخ الملفات داخل
dirAفقط إلىdirB(بدون إنشاءdirAبداخله).
أهم شكل واضح ودقيق لنسخ محتوى المجلد حتى لو فيه مخفي:
cp -a dirA/. dirB/Bash(سنشرح -a بعد قليل)
7) خيارات مهمة جدًا للمبتدئين (تحميك من أخطاء)
أ) عدم الاستبدال إذا الملف موجود: -n
cp -n file1.txt dir1/Bashب) يسألك قبل الاستبدال: -i (Interactive)
cp -i file1.txt dir1/Bashج) الاستبدال بدون سؤال (خطير): -f
cp -f file1.txt dir1/Bashللمبتدئ أنصح غالبًا بـ
-iحتى لا تمسح ملفات بالغلط.
8) عرض ما يحدث أثناء النسخ: -v
مفيد جدًا للتعلم والمتابعة:
cp -v file1.txt dir1/Bash9) الحفاظ على الخصائص والأوقات (Attributes & Timestamps)
أ) -p (preserve)
يحافظ على:
- الصلاحيات (permissions)
- المالك/المجموعة (إذا أمكن)
- أوقات الملف (timestamps)
مثال:
touch -t 202304010000 sample.txt
cp -p sample.txt copy_p.txt
ls -l sample.txt copy_p.txtBashب) الأفضل غالبًا: -a (archive)
الخيار -a “أرشفة” وهو الأكثر استخدامًا للنسخ الاحترافي لأنه يحافظ على كل شيء تقريبًا ويعمل بشكل ممتاز مع المجلدات.
cp -a dirA dirA_backupBashوأفضل طريقة لنسخ محتوى مجلد إلى مجلد موجود (بما فيه المخفي):
mkdir -p dirB
cp -a dirA/. dirB/Bash
dirA/.معناها: “انسخ كل شيء داخل dirA بما فيه المخفي”.
10) دمج خيارات مفيد جدًا
مثال عملي: نسخ مجلد مع الحفاظ على كل شيء + إظهار التفاصيل
cp -av dirA dirA_backupBashمثال: نسخ ملفات مع السؤال قبل الاستبدال + عرض ما يحدث
cp -iv file1.txt file2.txt dir1/Bash11) أخطاء شائعة (وأفضل حل)
أ) خطأ: “target is not a directory”
يعني أنت تحاول تنسخ عدة ملفات لكن الوجهة ليست مجلدًا:
cp file1.txt file2.txt newname.txtBash✅ الحل: اجعل الوجهة مجلدًا:
mkdir -p dest
cp file1.txt file2.txt dest/Bashب) خطأ عند نسخ مجلد بدون -r
cp dirA dirBBash✅ الحل:
cp -r dirA dirBBashج) الملفات المخفية لا تُنسخ عند استخدام *
cp -r dirA/* dirB/Bashهذا لا ينسخ مثل .env و .gitignore.
✅ الحل الأفضل:
cp -a dirA/. dirB/Bash12) تدريب سريع (Practice)
نفّذ هذا التدريب لتثبت فهمك:
cd ~/project
mkdir -p cp_practice/src
touch cp_practice/src/a.txt cp_practice/src/.hidden
mkdir -p cp_practice/dest
# 1) نسخ ملف
cp cp_practice/src/a.txt cp_practice/dest/
# 2) نسخ مجلد بالكامل
cp -r cp_practice/src cp_practice/src_backup
# 3) نسخ محتوى src إلى dest (بما فيه المخفي)
cp -a cp_practice/src/. cp_practice/dest/
# 4) عرض النتائج
ls -la cp_practice/dest
ls -R cp_practice/src_backupBashهل محتوى الشرح الأصلي كافي؟
نعم كبداية، لكنه يحتاج توسعة للمبتدئ في نقاط مهمة جدًا مثل:
- الفرق بين نسخ المجلد ونسخ محتواه
- موضوع الملفات المخفية مع
* - الخيارات الآمنة مثل
-iو-n - الفرق بين
-pو-a(والأهم أن-aغالبًا أفضل للمجلدات)