要用数字后缀备份现有文件,我可以执行以下操作:
cp --backup=numbered afile /path/to/dest但是,当我试图对文件夹执行同样的操作时,这种情况就不适用了:
cp -R --backup=numbered afolder /path/to/dest我怎样才能做到这一点?
也许我应该展示一下我想要达到的目标。首先,我们有两个脏东西:
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~发布于 2014-12-17 03:03:43
尝试:
find source -type f -exec cp --backup=numbered -- {} container/ \;发布于 2013-11-30 01:19:41
虽然在bash中可以做到这一点,但我更像是个蟒蛇,所以我的建议如下:
#!/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())https://unix.stackexchange.com/questions/103078
复制相似问题