मैं मालिकों और अनुमतियों को बरकरार रखते हुए एक फ़ोल्डर की प्रतिलिपि कैसे बना सकता हूं?


376

इसलिए मैं अपने होम फोल्डर को एक बाहरी ड्राइव पर कॉपी करके वापस करने जा रहा था जो निम्नानुसार है:

sudo cp -r /home/my_home /media/backup/my_home

इस परिणाम के साथ कि बाहरी ड्राइव पर सभी फ़ोल्डर अब स्वामित्व में हैं root:root। मैं cpमूल से स्वामित्व और अनुमतियां कैसे रख सकता हूं ?


23
हाँ, यह होगा, मुझे खुशी है कि उसने पूछा क्योंकि Google अभी भी 'आदमी' :-) से तेज है।
स्टिजेन ज्युकेंस

3
मुझे खुशी है कि उसने भी पूछा
ओले

5
@StijnGeukens यह भी नहीं है कि गूगल तेज है, यह है कि manमेरे लिए भी गुप्त है। इस मामले में, manपर -rकहते हैं same as --preserve=mode,ownership,timestamps। मुझे कैसे पता था कि मूल अनुमतियाँ रखने का मतलब है !?
कोलोब कैनियन

@KolobCanyon का मतलब है-p
तूफ़ान

जवाबों:


452
sudo cp -rp /home/my_home /media/backup/my_home

Cp मैनपेज से:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all

128
बहुत बेहतर उपयोग करने के लिए cp -a। इसमें -rइकोर्सिव फ्लैग भी शामिल है , लेकिन यह इससे कहीं अधिक है-यह फाइल के बारे में सब कुछ सुरक्षित रखता है; SELinux विशेषताएँ, लिंक, xattr, सब कुछ। यह "संग्रह मोड" है। बैकअप बनाने के लिए बेहतर उपकरण हैं, लेकिन यदि आप cpबैकअप के लिए उपयोग कर रहे हैं , तो इसके अलावा कुछ भी उपयोग न करें cp -a
वाइल्डकार्ड 3

24
यह काम करता है, लेकिन धैर्य यहां अच्छा है। यह समाप्त होने पर कमांड केवल सब कुछ सही सेट करेगा: जबकि यह अभी भी एक निर्देशिका की नकल कर रहा है, और आप cp को रूट के रूप में चला रहे हैं, निर्देशिका रूट के स्वामित्व में होगी। यह इस निर्देशिका के साथ पूरा होने पर ही इसे सही अनुमति पर सेट करेगा।
पॉल

4
cp -aकुछ प्रणालियों पर काम नहीं करता है: जैसे OS X, जहां (कुछ संस्करणों में कम से कम) एक का उपयोग करने की आवश्यकता है cp -pR। मेरे वर्तमान OS X सिस्टम पर (10.10.15), cp -aसम्मानित किया जा रहा है।
डब्यूजिम

यदि मैं एक फ़ोल्डर संरचना की प्रतिलिपि बनाने के लिए cp -a का उपयोग करता diff <(getfacl -R folder1) <(getfacl -R folder2)हूं, तो
iill का

आप "cp -rp" को सही क्यों करते हैं, "cp -p" को नहीं?
यूजीन कौरोव

94

आप भी इस्तेमाल कर सकते हैं rsync

sudo rsync -a /home/my_home/ /media/backup/my_home/

से rsyncमैनपेज:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

के बीच तुलना के लिए यह प्रश्न देखें : cpऔर https://stackoverflow.com/q/6339287/406686rsync

ट्रेलिंग स्लैश पर ध्यान दें (विवरण के लिए मैनपेज देखें)।


4
+1, cp -pअच्छा है, लेकिन मुझे rsyncसामान्य रूप से इतना अधिक उत्पादन पसंद है कि मैं इसके pcpलिए तैयार हूं time rsync --progress -ah। मेरे दिमाग में "प्रगति प्रति" के लिए खड़ा है। और दोनों स्वीकार करते हैं -r, इसलिए यह सामान्य टर्मिनल उपयोग के लिए अच्छी तरह से काम करता है - लेकिन दुर्भाग्य से, sudoइस प्रश्न / उत्तर में दिखाए गए संयोजन के साथ नहीं ।
इजाकाता

15
NB:, rsync -aविस्तारित विशेषताओं ( -X) और कोई ACLs ( -A) को संरक्षित नहीं करता है - संक्षिप्त विवरण कहता है archive mode; equals -rlptgoD (no -H,-A,-X)। उदाहरण के लिए SELinux संदर्भ बिना प्रेस्वर्ड नहीं होंगे -X। कई उपयोग मामलों के लिए यह ठीक है, लेकिन यदि आप अपने सिस्टम विभाजन का बैकअप बनाते हैं, तो लापता -X काफी टूट सकता है। जहाँ तक मुझे पता है, cp -aवास्तव में सभी फ़ाइल विशेषताओं को संरक्षित करता है।
पॉसिड्स

2
बस इस का परीक्षण किया, जबकि sudo cp -aस्वामित्व और समूहों को संरक्षित करता है, sudo rsync -aउन्हें जड़ में बदलता है। तो, @Perseids सही है।
जॉन हैमिल्टन

3
@ जोहान हैमिल्टन मिंट के तहत, यह पूरी तरह से काम करता है ... यह केवल स्वामित्व और समूहों को बाद में बदलता है (जब मैं नहीं बता सकता)। मैंने अभी-अभी अपना पूरा /homeफ़ोल्डर कॉपी किया है rsync -aX /home /mnt/sdd/और यह एक आकर्षण की तरह काम करता है।
ओलिवियर पोंस

@ जॉन हैमिल्टन ने वही नहीं जो पायरेसीड्स ने कहा था।
user643011

60
cp -a

कहाँ के -aलिए कम है --archive- मूल रूप से यह एक निर्देशिका की नकल करता है जैसा कि यह है; फाइलें उनकी सभी विशेषताओं को बरकरार रखती हैं, और सीमलिंक को डीरिफाइरेक्ट ( -d) नहीं किया जाता है ।

से man cp:

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

21

मैं उपयोग cp -pdRxकरता हूं जो -pमोड, स्वामित्व और टाइमस्टैम्प को संरक्षित करेगा , -dलिंक को संरक्षित करेगा (इसलिए आपको फ़ाइल की प्रतिलिपि बनाई गई सामग्री के बजाय सहानुभूति मिलती है), -Rइसे पुनरावर्ती रूप से करें और -xएक फ़ाइल सिस्टम पर रहें (केवल तभी उपयोगी हो जब आप कॉपी कर रहे हों /या एक सक्रिय माउंट बिंदु के साथ कुछ। )।

पुनश्च: -Rइसके बजाय -rउपयोग करने से सिर्फ आदत है ls -lR


2
cp -axउसी चीज का थोड़ा छोटा संस्करण है। यह महान काम किया - धन्यवाद!
EM0

वास्तव में -rऔर के बीच अंतर है -R। मैन पेज की जाँच करें (यहाँ तक कि यहाँ उद्धृत किया जाने वाला विशेष भाग भी)।
जेकॉन

2
मुझे नहीं लगता कि वहाँ है (हालांकि एक बार हो सकता है और अभी भी यूनिक्स के कुछ संस्करणों पर हो सकता है)। Man7.org/linux/man-pages/man1/cp.1.html देखें यह बस कहता है -R, -r, --recursive copy directories recursively
स्टारनेम जूल

14

cpफ़ाइल के स्वामित्व को संरक्षित करने का एक विकल्प है। के मैनुअल पेज से cp:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.

11

आप ऐसा कुछ कर सकते हैं:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tarअनुमतियाँ, स्वामित्व और निर्देशिका संरचना बरकरार है, लेकिन सब कुछ बाइट्स की एक धारा में परिवर्तित करता है। आप एक "सबस्लेम" (कोष्ठक कमांड) चलाते हैं जो निर्देशिका को बदलते हैं, और फिर tarरूपांतरण को उलटने के लिए मिलते हैं । बाइट्स का एक स्टीम सही स्वामित्व और अनुमतियों के साथ निर्देशिका और फाइलें बन जाता है।


7

इसका उत्तर सरल है: cpएक -pविकल्प है जो अनुमतियों (यहां एक मछली) को संरक्षित करता है।

लेकिन जैसा कि वोजटेक अपनी टिप्पणी में कहता है, man cp(ठीक मैनुअल पढ़ना) एक अच्छा प्रारंभिक बिंदु होगा (मछली कैसे सीखना है?)।


1

आप संरक्षित = सभी का उपयोग कर सकते हैं, फिर आपकी प्रति आपकी फ़ाइलों के स्वामी, समूह और टाइमस्टैम्प जैसी सभी विशेषताओं को बनाए रखेगी। तो, निम्न कमांड के साथ अपना बैकअप सुरक्षित रूप से करें।

cp -r --preserve=all /home/my_home /media/backup/my_home
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.