سؤال كيفية نسخ مع البروتوكول الاختياري لتشمل الملفات المخفية والدلائل المخفية ومحتوياتها؟


كيف يمكنني القيام بها cp -r نسخ كل شيء على الاطلاق من الملفات والدلائل في الدليل

المتطلبات:

  • وتشمل الملفات المخفية والدلائل المخفية.
  • كن أمرًا واحدًا مع العلم ليشمل ما سبق.
  • لا تحتاج إلى الاعتماد على نمط المطابقة على الإطلاق.

بلدي القبيح ، ولكن العمل ، الإختراق هو:

cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user

كيف يمكنني القيام بكل ذلك في أمر واحد دون مطابقة النمط؟ ما العلم الذي أحتاج إلى استخدامه؟


313
2017-10-27 19:46


الأصل


المزيد من الإجابات هنا ، على الرغم من أنها لا تبدو جيدة ؛ serverfault.com/questions/3154/... - Roel Van de Paar
من فضلك ، Eleven81 ، فكر في تغيير الإجابة المقبولة على تلك التي قدمهاbruno pereira ، لأنها تتجنب إنشاء مجلد جديد. إذا لم يكن الأمر كذلك ، فليكن هذا التعليق بمثابة تحذير للقراء الجدد للتحقق من الإجابة الأخرى (الأكثر تصويتاً). تكساس. - Dr Beco


الأجوبة:


لا تحدد الملفات:

cp -r /etc/skel /home/user

(لاحظ أن /home/user يجب أن لا يكون موجودًا بالفعل ، وإلا فسيخلق /home/user/skel.)


226
2017-10-27 19:55



هل من الممكن استخدام شيء مماثل إذا /home/user/skel  هل يوجد؟ - bradley.ayers
@ bradley.ayers أعتقد أنه يمكن للمرء أن ينسخ إلى دليل فرعي مؤقت ثم نقلها إلى المستوى الأعلى (بما أن الانتقال في نفس محرك الأقراص سريع). أقل من المثالي ، ولكن أقصر من الحلول الأخرى بالنسبة لي. - Halil Özgür
@ bradley.ayers إجابة برونو أدناه تتناول سؤالك - Mark
لم يعمل هذا الحل بالنسبة لي. لم تنسخ الملفات المخفية. أنا أستخدم الإصدار 6.5 من CentOS. @ حل برونو فعل الخدعة. - Technext
تحت أوبونتو / ديبيان هذا يضع الدليل 'skel' داخل الدليل الهدف وليس الملفات المتكررة داخل skel. استعمال -T(لا يوجد هدف) لكل أدناه للاستخدام السليم. (-rT لعاودي) - bshea


لنفترض أنك قمت بإنشاء المجلد الجديد (أو ستقوم بإنشاء مجلد جديد) وتريد نسخ الملفات إليه بعد إنشاء المجلد

mkdir /home/<new_user>
cp -r /etc/skel/. /home/<new_user>

سيؤدي هذا إلى نسخ كافة الملفات / المجلد بشكل متكرر من /etc/skel في المجلد الموجود بالفعل الذي تم إنشاؤه في السطر الأول.


396
2017-12-12 22:00



إذا لم أخطئ ، فهذا لم ينسخ الملفات المخفية / النقطة. - Halil Özgür
يعمل بشكل جيد بالنسبة لي. نلاحظ أن '.' أمر بالغ الأهمية لأنها تعمل. - Mark
إنه يعمل ، لكن لماذا؟ لا يمكن العثور على مرجع لهذا في الدليل. - Julien Palard
أعتقد أنه يعمل لأنه عادةً ، سيؤدي ذلك إلى إنشاء مجلد جديد باسم المجلد الأخير في الوسيطة الأولى. ومع ذلك ، لأن هذا الاسم هو .، يتطلب هذا السلوك إنشاء دليل موجود بالفعل ، بحيث يتخطى هذه الخطوة. - Zenexer
Technext لا يتضمن globeing الافتراضي في bash أسماء الملفات التي تبدأ بـ a .لتغيير ذلك تحتاج إلى استخدام shopt -s dotglob قبل أن تتمكن من تضمين هذه الملفات. حتى مع *، افتراضيًا ، تطلب منك نسخ جميع الملفات بشكل متكرر من هذا الدليل والتي يمكن توسيعها باستخدام * (والتي لا تتضمن الملفات المخفية بشكل افتراضي). بينما على الطرف الآخر . كنت تستخدم cp نسخ كل شيء بشكل متكرر من "هذا الدليل". - Bruno Pereira


bash نفسها لديها حل جيد ، لديها shell option، يمكنك cp، mv وما إلى ذلك وهلم جرا.:

shopt -s dotglob # for considering dot files (turn on dot files)

و

shopt -u dotglob # for don't considering dot files (turn off dot files)

الحل أعلاه هو معيار bash

ملحوظة:

shopt # without argument show status of all shell options
-u # abbrivation of unset 
-s # abbrivation of set

61
2018-02-06 01:14



هذا مفيد عندما تريد نسخ المحتوى فقط دون إنشاء دليل جديد داخل الوجهة. خاصة عندما تكون الوجهة dir نقطة التحميل. - kaszynek
هذا هو حقا أفضل إجابة ، ويصل إلى قلب السؤال .. - Stephen
انها setopt ل zsh ، في حالة أي شخص آخر يتساءل. - Pat


الوسائل الصحيحة للقيام بذلك هي استخدام -T (--no-target-directory) الخيار ، ونسخ المجلدات بشكل متكرر (بدون علامات مائلة لاحقة ، والعلامات النجمية ، وما إلى ذلك) ، بمعنى:

cp -rT /etc/skel /home/user

هذا سوف ينسخ محتويات /etc/skel إلى /home/user (بما في ذلك الملفات المخفية) ، وإنشاء المجلد /home/user إذا لم يكن موجودًا ومع ذلك -T الخيار يمنع محتويات /etc/skel من نسخها إلى مجلد جديد /home/user/skel يجب أن المجلد /home/user يوجد.


53
2017-09-08 21:50



اجابة صحيحة. +1 - bshea
كان هذا بالفعل هو الجواب الصحيح بالضبط - Gaetan
هذا هو أفضل إجابة للباقة؛ هو الوحيد الذي يحل المشكلة دون تعقيدها - ZaxLofful


استخدم rsync:

rsync -rtv source_folder/ destination_folder/


23
2018-02-20 13:18





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

cp -R /etc/skel /home/

سيؤدي هذا إلى نسخ / etc / skel directory إلى / home / ، بما في ذلك الملفات والدلائل المخفية.

في النهاية ، يمكنك نسخ الدليل وإعادة تسميته في سطر واحد:

cp -R /etc/skel /home/ && mv /home/skel /home/user

3
2018-05-16 08:38



أو يمكنك ببساطة استخدام cp -r /etc/skel /home/user لإعادة تسمية skel إلى user... - David
هذا صحيح ، فقط في حالة عدم وجود / home / user بعد. - Gabriel Hautclocq


rsync جيد ، لكن خيار آخر:

cp -a src/ dst/

من المساعدة الرئيسية:

   -a, --archive
          same as -dR --preserve=all

   -d     same as --no-dereference --preserve=links

   -R, -r, --recursive
          copy directories recursively

2
2017-08-28 17:46



أنا دائما تستخدم cp -r. شكرا على ذكر cp -a - Pinaki Mukherjee


هل يمكن استخدام rsync.

rsync -aP ./from/dir/ /some/other/directory/

يمكنك نسخ حتى عبر سه

rsync -aP ./from/dir/ username@remotehost:/some/other/directory/

هناك العديد من العلامات التي يمكنك استخدامها:     -أو - archive # archive (-rlptgoD)

-r, --recursive
-l, --links      # copy symlinks as links
-p, --perms      # preserve permissions
-t, --times      # preserve times
-g, --group      # preserve group
-o, --owner      # preserve owner
-D               # --devices --specials

--delete         # Delete extra files

You may want to add the -P option to your command.

--partial        # By default, rsync will delete any partially transferred file if the transfer is interrupted. In some circumstances it is more desirable to keep partially transferred files. Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster.

-P               # The -P option is equivalent to --partial --progress.   Its  purpose  is to make it much easier to specify these two options for a long transfer that may be interrupted.

صفحة Rsync


2
2018-01-17 17:32