كيف يمكنك نسخ جميع محتويات دليل واحد إلى آخر؟
فمثلا:
$ cd /home/newuser
$ cp -a /backup/olduser/* .
المشكلة في ما سبق هي أن نمط الكرة الأرضية "*" يطابق الأدلة المخفية ". و ".." وينتهي بك الأمر مع دليل "olduser" داخل "newuser" ، وكذلك المحتويات.
يمكنك أيضًا القيام بشيء مثل هذا:
$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser
ولكن ماذا لو كان مستخدم جديد يحتوي بالفعل على بعض الملفات والدلائل الافتراضية؟
ما هي أبسط الطرق وأكثرها سهولة وأسرعها في تذكرها وليس الفوضى لنقل محتويات دليل إلى آخر باستخدام الأمر "cp" الأساسي والقذيفة؟
محاولة:
cp -ra /backup/olduser/. /home/newuser
دليلان a و b.
كلاهما له ملفات في.
أنت في دليل يحتوي على b.
cp -r ./a b
-r
= بشكل متكرر.
تذكر أيضًا أنه افتراضيًا ، قم بنسخ الدليل الأول في الدليل الثاني إذا كان الثاني موجودًا. على سبيل المثال ، ستقوم cp -a a b
بنسخ INTO b في حالة وجود b ، بمعنى أنه سيتم إنشاء a في b.
إذا لم يكن ما تريده ، وتريد نسخ محتوى من a إلى b (على سبيل المثال عند نسخ نظام ملفات كامل إلى نقطة تحميل) ، استخدم :
cp -a a/. b
كما في الاجابة السابقة.
يرجى أيضًا ملاحظة أن -a
يتضمن -r
بحيث -ar
غير ضروري.
ما لم تكن قد قمت بإعادة تكوين Shell على نحو خطير ، فإن نمط الالتقاط "*" لا يتطابق "." أو ".." ، كما يمكنك التحقق من استخدام echo * فقط. ما تفعله بدلاً من ذلك هو حذف الملفات التي يبدأ اسمها بـ "." ، لذلك لن يفوتك كل الملفات المخفية. يمكنك تعديل بعض هذا السلوك باستخدام خيارات Shell ، على سبيل المثال ، خيار dotglob في bash ، لكن ذلك لن يكون الخيار المحمول والقوي الذي تبحث عنه.
إذا كنت بحاجة إلى القيام بذلك أكثر من مرة أو مرتين ، فنوصيك بالبحث في rsync أو انسجامًا (اعتمادًا على الاحتياجات المحددة) بمواصفات المصدر والهدف المستهدفة بعناية.
بديل آخر هو وضع الدليل المصدر في لعبة tarball وإلغاء ضبطه على الدليل الهدف الحالي.
سيؤدي هذا إلى نسخ كل من الملفات العادية والمخفية ، مع استبعاد الدليل الأصل (..
):
cd /directory/to/copy
cp -r * .[^.]* /destination/directory
إذا لم تستبعد الدليل الأصل ، فسينتهي بكافة محتويات ..
في دليل وجهتك أيضًا.
يعمل هذا على نسخ جميع الملفات والدلائل باستثناء الدلائل المخفية بشكل متكرر من الدليل الحالي إلى أي مكان:
cp -rf * ^.*
لنسخ الملفات التي تبدأ بنقطة ، قم فقط باستخدام cp. * الهدف /
الأسهل هو أن تفعل الأمر cp مرتين.
كما بيتر Eisentraut sais القواعد المعتادة التزوير لا تشمل .. و. (جلالة ، كيفية إنهاء هذه الجملة؟ ؛)
مجرد استخدام -r لجعله متكرر و- i لجعل cp اسأل عما إذا كنت تريد حقًا الكتابة فوق ملف.
cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/