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~等,从而在单独的目录中跟踪状态的每个变化。这是正确的吗?
erch 2013年

Answers:


1

尽管这可以用bash来完成,但我更像是一个python专家,所以我的建议如下:

#!/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/ \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.