सवाल छिपी हुई फाइलों और छिपी निर्देशिकाओं और उनकी सामग्री को शामिल करने के लिए सीपी के साथ प्रतिलिपि कैसे करें?


मैं कैसे कर सकता हूँ 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
यह समाधान मेरे लिए काम नहीं करता था। यह छिपी हुई फाइलों की प्रतिलिपि नहीं बना। मैं CentOS रिलीज 6.5 का उपयोग कर रहा हूँ। @ ब्रूनो के समाधान ने चाल की। - Technext
उबंटू / डेबियन के तहत यह लक्ष्य निर्देशिका के अंदर निर्देशिका '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 बैश में डिफ़ॉल्ट globbing में से शुरू होने वाले फ़ाइल नाम शामिल नहीं है ., बदलने के लिए आपको इसका उपयोग करने की आवश्यकता है shopt -s dotglob उन फ़ाइलों को शामिल करने में सक्षम होने से पहले कमांड करें। के साथ *, डिफ़ॉल्ट रूप से, आप इस निर्देशिका से सभी फ़ाइलों को दोबारा कॉपी करने के लिए कह रहे हैं जिनका उपयोग करके विस्तार किया जा सकता है * (जिसमें डिफ़ॉल्ट रूप से छिपी हुई फाइलें शामिल नहीं हैं)। जबकि दूसरे छोर पर . आप "इस निर्देशिका" से सब कुछ कॉपी करने के लिए सीपी का उपयोग कर रहे हैं। - 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



यह उपयोगी है जब आप गंतव्य के अंदर नई निर्देशिका बनाये बिना केवल सामग्री की प्रतिलिपि बनाना चाहते हैं। खासकर जब गंतव्य डीआईआर माउंट प्वाइंट है। - 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 निर्देशिका / 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



मैं हमेशा सीपी-आर इस्तेमाल किया। सीपी-ए का जिक्र करने के लिए धन्यवाद - Pinaki Mukherjee


आप rsync का उपयोग कर सकते हैं।

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

आप एसएसएच पर भी कॉपी कर सकते हैं

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

आप विभिन्न झंडे का उपयोग कर सकते हैं:     -ए, --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.

रुपयेync मैन पेज


2
2018-01-17 17:32





ध्यान दें कि एक कमांड लाइन चाल है (कम से कम काम करता है, , दे घुमा के, तथा क्ष): बस प्रत्यय से एक स्लैश के साथ निर्देशिका। यह की सामग्री डालना होगा से में निर्देशिका सेवा मेरे निर्देशिका (विडंबना यह है कि, मैंने पहली बार इस चाल के बारे में सीखा था का उपयोग करते हुए  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

1
2018-05-12 20:00





मैं यहां एक ही समस्या के समाधान के लिए गूगले आया था, तब मुझे एहसास हुआ कि खोज के साथ करना आसान है। यह लाभ शैल, या विशेष उपयोगिताओं पर निर्भर नहीं है जो स्थापित नहीं हो सकते हैं।

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

मैंने पिछली स्लैश के साथ चाल की कोशिश की, लेकिन यह मेरे लिए काम नहीं किया।


1
2017-07-24 13:34