it-swarm.asia

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

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

المتطلبات:

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

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

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

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

356
eleven81

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

cp -r /etc/skel /home/user

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

244
Randy Orrison

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

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

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

445
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
65
PersianGulf

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

cp -rT /etc/skel /home/user

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

65
TechnocratiK

استخدم rsync:

rsync -rtv source_folder/ destination_folder/

24
user1084282

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

cp -R /etc/skel /home/

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

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

cp -R /etc/skel /home/ && mv /home/skel /home/user
4
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
4
Wink Saville

يمكنك استخدام رسينك.

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

يمكنك حتى نسخ أكثر من سه

rsync -aP ./from/dir/ [email protected]:/some/other/directory/

هناك العديد من الأعلام التي يمكنك استخدامها: -a ، - 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 man page

3
RoshP

أبسط طريقة هي:

cp -r /etc/skel/{.,}* /home/user

يتضمن التعبير {.,}* جميع الملفات والدلائل (يبدأ أيضًا بنقطة).

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

cp -r /etc/skel/* /etc/skel/.* /home/user
3
simhumileco

لاحظ أن هناك خدعة سطر أوامر (تعمل على الأقل ، sh ، bash ، و ksh ): فقط لاحقة من الدليل بشرطة مائلة. سيؤدي ذلك إلى سكب محتويات من الدليل إلى إلى الدليل (ومن المفارقات أنني تعلمت لأول مرة عن هذه الخدعة عندما باستخدام rsync ).

مثال:

/tmp$ mkdir test_dir1
/tmp$ cd test_dir1/
/tmp/test_dir1$ touch aa
/tmp/test_dir1$ touch .bb
/tmp/test_dir1$ cd ..
/tmp$ mkdir test_dir2

/tmp$ cp -r test_dir1/* test_dir2
/tmp$ ls -1a test_dir2
.
..
aa

/tmp$ cp -r test_dir1/ test_dir2
/tmp$ ls -1a test_dir2
.
..
.bb
aa
2
Dustin Oprea

لقد جئت إلى هنا بعد أن غوغل للتوصل إلى حل للمشكلة نفسها ، ثم أدركت أنه من السهل القيام بالعثور عليها. الميزة التي لا تعتمد عليها على Shell أو الأدوات المساعدة الخاصة التي قد لا تكون مثبتة.

find /etc/skel/ -mindepth 1 -exec cp -r {} /home/username/ \;

جربت الحيلة بشرطة مائلة زائدة ، لكن ذلك لم ينفعني.

2
Linus

الحل الخاص بي لهذه المشكلة عندما يكون لدي نسخ جميع الملفات (بما في ذلك ملفات .) إلى دليل هدف الاحتفاظ بالأذونات هو: (الكتابة فوق إذا كانت موجودة بالفعل)

yes | cp -rvp /source/directory /destination/directory/

yes مخصص للكتابة التلقائية للملفات الوجهة ، r العودية ، v مطوّل ، p يحتفظ بالأذونات.

لاحظ أن المسار المصدر لا ينتهي بـ /(بحيث يتم نسخ جميع الملفات/الدليل و. الملفات)

ينتهي دليل الوجهة بـ /بينما نضع محتويات المجلد المصدر إلى الوجهة ككل.

2
Rajneesh Gadge

لقد رأيت أن cp لا يقوم دائمًا بنسخ الملفات المخفية ، وإذا كنت ترغب في أمر يبدو أنه يعمل عبر جميع لهجات linux/unix ، فيجب أن تحاول استخدام:

cd /etc/skel
find | cpio -pdumv /home/user
1
Mikael Nyborg