शेल में एक ही बार में विभिन्न फ़ोल्डरों में कई फाइलों को कॉपी-रीनेम (बैकअप) करने का सबसे स्मार्ट तरीका क्या है?


0

मैं ntpd को अपडेट करने से पहले एक बार में कई फाइलों को अलग-अलग फोल्डर में कॉपी-बैकअप करना चाहता हूं।

उदाहरण (केवल एक फ़ाइल): sudo cp /usr/sbin/ntpd /usr/sbin/ntpd.old

फ़ाइलें:

/usr/bin/sntp  
/usr/bin/ntp-keygen  
/usr/bin/ntpq  
/usr/sbin/ntpdc  
/usr/sbin/ntpdate  
/usr/sbin/ntpd

वांछित परिणाम:

/usr/bin/sntp  
/usr/bin/sntp.old 
/usr/bin/ntp-keygen   
/usr/bin/ntp-keygen.old  
/usr/bin/ntpq  
/usr/bin/ntpq.old  
/usr/sbin/ntpdc  
/usr/sbin/ntpdc.old  
/usr/sbin/ntpdate  
/usr/sbin/ntpdate.old  
/usr/sbin/ntpd
/usr/sbin/ntpd.old

क्या इस कार्य को पूरा करने के लिए एक स्मार्ट वन-लाइनर मौजूद है?

जवाबों:


1

उपयोग xargs:

cat filelist | xargs -I {} cp {} {}.old

और बिना स्पष्ट फाइल-फाइल के मैं यह कैसे कर सकता हूं।
klanomath

xargs कमांड बनाने और चलाने के लिए मानक इनपुट से लाइनें लेता है। तुम दौड़ सकते हो xargs -I {} cp {} {}.old, इनपुट फाइलनाम (अलग लाइनों पर) हाथ से (या पेस्ट के माध्यम से) और Ctrl + D (इनपुट के अंत के निशान) दबाएं।
andrybak

वहाँ का एक बेकार उपयोग है cat, और पाइप करने का पसंदीदा तरीका xargs (यदि आवश्यक हो) का उपयोग करना है find … -print0 | xargs -0
slhck

1

शेल लूप का उपयोग करना

एक साधारण लूप की तरह कुछ, दो निर्देशिकाओं पर चलना और फिर मिलान करने वाली फाइलें:

for dir in /usr/bin /usr/sbin; do
  for file in "$dir/"*ntp*; do 
    sudo cp "$dir/$file" "$dir/$file.old"
  done 
done

यह मिलान करने वाली सभी फ़ाइलों की प्रतिलिपि बनाएगा *ntp* एक ही फ़ाइल नाम के साथ दोनों निर्देशिकाओं में पैटर्न .old संलग्न।

अपने नाम में व्हॉट्सएप के साथ फाइलों के खिलाफ सुरक्षा के रूप में चर को सही ढंग से उद्धृत करना सुनिश्चित करें। पैटर्न *ntp* उद्धृत नहीं किया जाना चाहिए ताकि इसका विस्तार किया जा सके।

का उपयोग करते हुए find

आप उपयोग कर सकते हैं find तथा -exec भी:

find /usr/bin /usr/sbin -type f -iname '*ntp*' -exec sudo cp {} {}.old \;

उपरोक्त सुरक्षित होगा क्योंकि यह केवल फाइलों पर चलता है - लेकिन आपको निर्देशिकाओं के नाम की उम्मीद नहीं है ntp, तो यह ठीक है, मुझे लगता है।

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