cp --backup = फ़ोल्डरों के लिए गिना गया


10

मौजूदा प्रत्ययों के साथ मौजूदा फाइलों का बैकअप लेने के लिए, मैं निम्नलिखित कार्य कर सकता हूं:

cp --backup=numbered afile /path/to/dest

लेकिन यह तब लागू नहीं होता है जब मैं एक फ़ोल्डर के साथ ऐसा करने की कोशिश करता हूं:

cp -R --backup=numbered afolder /path/to/dest

इसे कैसे प्राप्त किया जा सकता है?


शायद मुझे थोड़ा सा प्रदर्शन करना चाहिए कि मैं क्या हासिल करना चाहता हूं। पहले हमारे पास दो dirs हैं:

ls -ld source container
drwxrwxr-x 6 kaiyin kaiyin 4096 Nov 29 22:11 container
drwxrwxr-x 2 kaiyin kaiyin 4096 Nov 29 22:09 source

फिर हम यह करते हैं:

myPerfectCp -R --backup=numbered source container/
myPerfectCp -R --backup=numbered source container/
myPerfectCp -R --backup=numbered source container/
myPerfectCp -R --backup=numbered source container/

आदर्श रूप से मुझे यह परिणाम चाहिए:

tree container/
container/
├── source
├── source.~1~
├── source.~2~
└── source.~3~

बस एक विचार: मैं " बैकअप " के रूप में समझाता हूं : "* निश्चित समय पर फाइलों का स्नैपशॉट रखना"। निर्देशिकाएं स्वयं नहीं बदलती हैं - यह उनकी सामग्री है जो बदल जाती है। मैं के रूप में अपने प्रश्न को समझने: " लगातार गिने निर्देशिका कि फ़ाइलों का बैकअप को शामिल कैसे बनाएं " -> एक निर्देशिका रखने के बजाय backup.~1~, backup~2~आदि आप चाहते dir~1~युक्त backup~1~, पीछा dir~2~युक्त backup~2~और इतने पर है, इस प्रकार एक अलग निर्देशिका में राज्य के प्रत्येक परिवर्तन पर नज़र रखने। क्या यह सही है?
एर

जवाबों:


1

हालांकि यह बाश में किया जा सकता है, मैं एक अजगर आदमी अधिक हूं, इसलिए यहां मेरा प्रस्ताव जाता है:

#!/usr/bin/env python
import glob
import os
import sys


def cpdir(source, target):
    if target.endswith('/'):
        if not os.path.isdir(target):
            print "Target directory doesn't exist: %s" % target
            sys.exit(1)
        target += source
    if '--backup=numbered' in sys.argv:
        dirs = glob.glob(target + '.~*~')
        if not dirs:
            num = 1
        else:
            num = max([int(dir.split('~')[-2]) for dir in dirs]) + 1
        target += '.~%s~' % num
    cmd = 'cp -a %s %s' % (source, target)
    #print cmd
    rv = os.system(cmd)
    sys.exit(rv)

def main():
    if len(sys.argv) < 3:
        print "Usage: %s [--backup=numbered] <source> <dest>" % sys.argv[0]
        sys.exit(1)
    source = sys.argv[1]
    target = sys.argv[2]
    return cpdir(source, target)

if __name__ == '__main__':
    sys.exit(main())

1

प्रयत्न:

find source -type f -exec cp --backup=numbered -- {} container/ \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.