Cp कमांड से किस फाइल को कॉपी किया जाएगा?


11

मैं एक सरल स्क्रिप्ट बना रहा हूं जो DIRECTORYA की उन सभी फ़ाइलों को कॉपी करता है जो DIRECTORYB में मौजूद नहीं हैं। मैं यह cp कमांड के उपयोग के माध्यम से कर रहा हूँ:

cp -u DIRECTORYA/* DIRECTORYB

मैं जो करना चाहता हूं वह एक व्यवस्थापक को एक ईमेल भी भेजना है जो उन फ़ाइलों की सूची देगा जिन्हें कॉपी किया गया है।

इसलिए आदर्श रूप से, इससे पहले कि मैं उपरोक्त कमांड चलाता हूं, मैं उन फ़ाइलों को प्राप्त करना चाहता हूं जिन्हें कॉपी किया जाएगा और उन्हें अपने ईमेल संदेश का निर्माण करते समय बाद में उपयोग के लिए एक चर में संग्रहीत किया जाएगा।

क्या कोई मुझे सही दिशा में निर्देशित कर सकता है? मैंने grep का उपयोग किया है, लेकिन मुझे नहीं लगता कि यह cp कमांड के साथ किया जा सकता है?


1
हो सकता है कि मैं आपके प्रश्न को गलत समझ रहा हूँ, लेकिन क्या आप -vध्वज का उपयोग नहीं कर सकते, फिल्नामों को मुद्रित करने के लिए जैसे वे कॉपी किए जाते हैं? एक फ़ाइल में या एक चर में सीधे रीडायरेक्ट करें और अपना संदेश बनाने के लिए इसका उपयोग करें।
ThibautRenaux

इसके अतिरिक्त cpकमांड में ऑप्शन है --attributes-onlyजो फाइल डेटा को कॉपी नहीं करने देता है, लेकिन सिर्फ डायरेक्टरी और फाइल स्ट्रक्चर को।
कोस्टास

क्षमा करें, मैं स्क्रिप्टिंग में काफी नया हूं। यदि मैं -v ध्वज का उपयोग करता हूं, तो मैं फ़ाइल के बजाय एक चर पर कैसे आउटपुट कर सकता हूं?
जेम्स

1
मान लें कि आप बैश का उपयोग कर रहे हैं, तो variable=$(cp -v ...)cp का स्टेपआउट कैप्चर करता है। देखें gnu.org/software/bash/manual/html_node/Command-Substeration.htm
गौतम

जवाबों:


4

मुझे नहीं लगता कि जीएनयू के cpपास आपकी मदद करने के लिए कुछ भी है अगर आप यह देखना चाहते हैं कि यह अभिनय के बिना क्या करेगा। यदि आप संशोधित की गई फ़ाइलों को लॉग करना चाहते हैं, तो आप -vविकल्प का उपयोग कर सकते हैं :

cp -puv DIRECTORYA/* DIRECTORYB >copy.log

इसके बजाय cp, आप rsync का उपयोग कर सकते हैं , जो बहुत अधिक शक्तिशाली है और निम्न-अंत एम्बेडेड सिस्टम (और डिफ़ॉल्ट रूप से मौजूद नहीं है, जहां इसे स्थापित करना आसान है) को छोड़कर लगभग हर जगह स्थापित किया गया है।

rsync -aun DIRECTORYA/* DIRECTORYB >what-would-be-done.txt

या

rsync -auv DIRECTORYA/* DIRECTORYB >copy.log

3

मैनुअल पेज के अनुसार ,

-u, केवल तब कॉपी करें जब SOURCE फ़ाइल गंतव्य फ़ाइल की तुलना में नई हो या जब गंतव्य फ़ाइल गायब हो--update

यह एक विशेषता है जो दो परीक्षणों को जोड़ती है, एक स्क्रिप्ट में लागू करने के लिए एक तुच्छ ( लापता ) और कुछ काम ( नए ) की आवश्यकता होती है । आप एक स्क्रिप्ट बना सकते हैं जो रिपोर्ट करती है कि उपयोग करने की क्या आवश्यकता है comm, diffऔर test

मानक cpउपयोगिताओं में से कोई भी प्रतिलिपि ऑपरेशन को सुखाने-चलाने की क्षमता प्रदान नहीं करता है। जैसा कि सुझाव दिया गया है, rsyncआमतौर पर उपलब्ध उपयोगिता के साथ ऐसा करने का तरीका है। बेशक, rsyncआमतौर पर सिर्फ नए या लापता (फ़ाइल का आकार और टाइमस्टैम्प भी उपयोग किया जाता है) की तुलना में अधिक मानदंडों के आधार पर कॉपी करने के लिए उपयोग किया जाता है। लेकिन इसे सिर्फ करने के लिए कम किया जा सकता है cp -u

गैर-मानक उपयोगिताओं के लिए, copy1980 के दशक के उत्तरार्ध में उपयोगिता है जो मैंने लिखा था (और निश्चित रूप से अभी भी उपयोग करता है)। संभवतः यह makeउपयोगिता से प्रेरित था , क्योंकि मैंने जो पहला विकल्प जोड़ा था -n

दिए गए उदाहरण के लिए, इसका उपयोग इस तरह किया जाएगा:

$ copy -nvU DIRECTORYA/* DIRECTORYB
** copy DIRECTORYA/foo to DIRECTORYB/foo
** 1 file would be copied, 616 bytes

आगे की पढाई:

  • कॉपी - फ़ाइल / निर्देशिका कॉपी उपयोगिता

    -n फ़ाइलों के वास्तविक निर्माण या संशोधन को निष्क्रिय कर देता है, और (क्रिया के स्तर के आधार पर) वह प्रभाव दिखाता है जो copy कमांड का होगा।
    -u फ़ाइलें तभी कॉपी करती हैं जब उनका आकार या संशोधन तिथि भिन्न होती है, और लिंक-पाठ भिन्न होने पर ही लिंक होता है।
    -U केवल उन फ़ाइलों को कॉपी करता है जो गंतव्य की तुलना में नई हैं, या जो गंतव्य में मौजूद नहीं हैं।

  • अगस्त 1988 से चैंज एंट्री :

    1988/08/16    
            * src / copy / src / copy.c: जोड़ा गया "-d" और "-n" विकल्प।
    

2

अगर आप दौड़ना चाहते थे cp foo*bar whatever, तो echo foo*bar whateverइसके बजाय दौड़ें ।


1
लेकिन ओपी भागना चाहता है cp -uऔर वह cp के लिए ड्राई-रन जैसे विकल्प की तलाश में है।
अर्कादियुस ड्राज्स्की 20

0

आप अलग कमांड का उपयोग कर सकते हैं। मेरे पास एक काम है जो हर रोज़ कुछ बैकअप फ़ाइलों को कॉपी करता है। कुछ समय के लिए मुझे जाँचने की ज़रूरत है कि क्या सभी फ़ाइलों की प्रतिलिपि बनाई गई है, यहाँ वाक्यविन्यास है:

diff /file1/ /file2/

और निश्चित रूप से यदि आप उन्हें उपयोग की प्रतिलिपि बनाना चाहते हैं:

cp -u /file1/* /file2

0

इसके बजाय rsync का उपयोग करने पर विचार करें। रुपीक्स स्थानीय प्रतियों पर पूरी तरह से काम करता है और निश्चित रूप से आप जो चाहते हैं वह कर सकते हैं, एक बार पंद्रह गजिलियन विकल्पों के माध्यम से आप इसे मिटा देंगे।

rsync -avun DIRECTORYA/ DIRECTORYB

आपको वह सब कुछ दिखाएगा जो किया जाएगा, और

rsync -avu DIRECTORYA/ DIRECTORYB

करूंगा।

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