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 "을 "* 특정 시간에 파일의 스냅 샷 유지 *"라고 설명하겠습니다 . 디렉토리 자체는 변경되지 않으며 변경되는 내용입니다. 나는 같은 질문을 이해 : " 파일의 백업을 포함 연속적으로 번호 디렉토리를 만드는 방법 "-> 대신에 하나 개의 디렉토리를 유지 backup.~1~, backup~2~당신이 원하는 등을 dir~1~포함 backup~1~, 다음 dir~2~포함 backup~2~하여 별도의 디렉토리에있는 국가의 각 변화를 추적, 등등. 이게 옳은 거니?
erch

답변:


1

이것은 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())

1

시험:

find source -type f -exec cp --backup=numbered -- {} container/ \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.