نسخ الملفات على لينكس [أداة cp]

بسم الله و الحمد لله و الصلاة و السلام على رسل الله و آله و أصحابه و من إتبع هداه

طريقة نسخ الملفات على لينكس

الطريقة بإستخدام سطر الأوامر

الأداة المستخدم cp

كيف نقوم بنسخ الملفات على أنظمة لينكس و الأنظمة التي مثل يونكس و الأنظمة التي مثل بي إس دي.كيف نقوم بعمل نسخة ثانية لملف.
و كيف نقوم بنسخ الملفات و المجلدات على الطرفية و صدفة باش.

هذا ما سنتطرق له في هذا الموضوع.

طريقة عمل الأداة

شكل عمل الأداة من داخل دليل باش

NAME
   cp - copy files and directories

SYNOPSIS
   cp [OPTION]... [-T] SOURCE DEST          cp [OPTION]... SOURCE... DIRECTORY
   cp [OPTION]... -t DIRECTORY SOURCE... 
DESCRIPTION
   Copy SOURCE to DEST, or multiple
   SOURCE(s) to DIRECTORY.

بهذا المقطع توجد معلومات
حول الأداة.

الجزء الأول :

تعريف بسيط عنها. و هو أنها أداة تنسخ الملفات و المجلدات.

الجزء الثاني :

طريقة إستخدام الأداة:

الأمر ثم مسافة ثم إسم الملف المصدر ثم مسافة ثم إسم المسار الهدف.
بإختصار هذا هو شكل طيقة عمل الأداة.
سنمر لكثير من التفاصيل حول هذه العملية.

الجزء الأخير:

يعطي شرح عن ما تقوم به الأداة.

أمثلة:
لتقوم بنسخ ملف إسمه file1.txt
إلى ملف آخر بإسم
File_1.txt
داخل نفس المسار. نقوم بالتالي:

الملفات الموجودة حاليا بالمسار

ls -R
.:
Desint2  file1.txt file3.txt
Destin1  file2.txt

./Desint2:
file3.txt

./Destin1:
file1.txt  file2.txt  file3.txt

نطبق الأمر:

cp file1.txt File_1.txt

نتأكد هل العملية نجحت

ls -R
.:
Desint2  File_1.txt  file2.txt
Destin1  file1.txt   file3.txt

نريد تغير الإسم. نختار أي إسم نريد بعد نهاية المسار المستهدف .سواء ملف أو مجلد.

cp file1.txt file1_new.txt
cp -R Dir1.txt Dir1_new.txt

كما يمكننا نسخ ملفات متعددة إلى مجلد

cp file1.txt file2.txt file3.txt Destin1/

علامة / الموجودة بآخر المجلد
Destin1
ليست ضرورية.
نتأكد من وجود الملفات

ls -R Destin1/          Destin1/:
file1.txt  file2.txt  file3.txt

ملاحظة مهمة يجب التنبه لها أو البحث لفهمها جيدا.
عندها سيزول إشكال نسخ الملفات من مسار إلى مسار آخر.
و هي فهم الفرق بين
absolute path
و
relative path
لن أخوض في شرحها. و لكن بإختصار
absolute
تعني مسار كامل للملف.غالبا يبدأ بعلامة /
و مسار
relative
طريق بديل للوصول للملف.
المسار يبدأ بأشكال مختلفة دون علامة
/
ربما نقطة أو رمز.

مثال لنسخ ملف عن طريق absolute path

echo $PWD
/home/samir/temp/cp_lab

ls
Desint2  File_1.txt  file2.txt
Destin1  file1.txt   file3.txt

هذا هو المسار الحالي و يوجد به هذه الملفات.

echo $HOME
/home/samir/

و هذا مسار منزل المستخدم.

لنقل أننا نريد نقل ملف
file2.txt
إلى منزل المستخدم .داخل مجلد
Samir-Temp-Dir

cp /home/samir/temp/cp_lab/file3.txt /home/samir/Samir-Temp-Dir/

تعطي المسار الكامل لمصدر الملف و تعطي أيضا المسار الكامل للمسار الهدف.
بعبارة أخرى تطبق الأمر
pwd
من داخل المسار الموجود به الملف المصدر.ستعطيك absolute path
لذلك الملف.
و تقوم بنفس الشيء للمسار المستهدف.

و الطريقة الأخرى مختصرة

cp file3.txt ~/Samir-Temp-Dir

هذه العلامة ~ تعني المنزل
أو هكذا

cp file3.txt $HOME/Samir-Temp-Dir

كلها تعمل.

لنقول للصدفة باش إطبع لنا ما يحدث أثناء عملية النسخ. نستخدم لاحقة
-v

cp -v node_modules/plex/README.md ~/temp/cp_lab/
'node_modules/plex/README.md' -> '/
/home/samir/temp/cp_lab/README.md'

و لنسخ الملفات مع الإبقاء خصائصها و أقصد المعلومات المتعلقة بالملفات أو ما يسمى
attributes
أي تاريخ الملفات و الصلاحيات و المجموعة و ما إلى ذلك.
نستخدم لاحقة
-p
لنفرض على أداة النسخ
أن تبقي على تلك المعلومات أثناء عملية النسخ و لا تغيرها.
مثال:

cp -p *.txt ~/temp/letx/

سيقوم بنسخ جميع الملفات الموجودة بالمسار الحالي و التي تنتهي بصيغة
txt
و نقلها إلى

~/temp/letx/

كما يمكننا وضع علامة نجمة مكان صيغة الملف. لننسخ جميع لملفات التي تبدأ بإسم معين

file*

مثال :

cp file* ~/temp/

و من الخاصيات المهمة لهذه الأداة.
لاحقة
-i
تعطيك خيار التأكيد قبل الكتابة على ملف أو مجلد.

مثال

cp -i temp/letx/file1.txt temp/text_dir/
cp: overwrite 'temp/text_dir/file1.txt'?

كنا يمكن إضافتها لملف bashrc

cp() { command cp -i “${@}”; }

و من الخاصيات المهمة أيضا.لاحقة

-R
تمكنك من نسخ المجلدات و محتوياتها.

مثال بدونها

cp plex/ letx/
cp: -r not specified; omitting directory 'plex/'

رسالة خطأ.

مع تلك اللاحقة :

$ cp -vR plex/ letx/

'plex/IBM-Plex-Serif/fonts/split/woff2' -> 'letx/IBM-Plex-Serif/fonts/split/woff2'

لاحقة -r
تقوم بنفس الشيء و أيضا لاحقة -a
الفرق أنها لا تغير معلومات الميتاداتا للملفات.

و منها أيضا لاحقة

-u
تنسخ فقط الملفات الحديثة من المصدر.إذا وجدت ملفات أحدث منها في المسار المستهدف.لا تقوم بالنسخ.

cp -upa home/samir/*.pdf ~/Documents/Ebooks/

كما يمكن تنسيق الأداة مع أدواة أخرى. للقيام بعمليات معقدة.
مثال

find / -iname "*vault*" -exec cp -apu {} ~/Data/ \;

أو إستخدام
for loop.

و من الخاصيات المهمة. لاحقة
-b backup
عمل نسخة إحتياطية للملفات قبل نسخها.

cp -Rb /etc/* etc_backup

إلى هنا ينتهي الموضوع.