rsync 또는 diff와 같은 기존 Linux 명령으로 수행 할 수 있는지 확실하지 않습니다. 그러나 파이썬에는 파일 비교를 위해 "filecmp"모듈이 있으므로 Python을 사용하여 자체 스크립트를 작성해야했습니다. 개인 사이트 ( http://linuxfreelancer.com/) 에 전체 스크립트 및 사용법을 게시했습니다.
사용법은 간단합니다. 순서대로 새 디렉토리, 이전 디렉토리 및 차이 디렉토리의 절대 경로를 지정하십시오.
#!/usr/bin/env python
import os, sys
import filecmp
import re
from distutils import dir_util
import shutil
holderlist=[]
def compareme(dir1, dir2):
dircomp=filecmp.dircmp(dir1,dir2)
only_in_one=dircomp.left_only
diff_in_one=dircomp.diff_files
dirpath=os.path.abspath(dir1)
[holderlist.append(os.path.abspath( os.path.join(dir1,x) )) for x in only_in_one]
[holderlist.append(os.path.abspath( os.path.join(dir1,x) )) for x in diff_in_one]
if len(dircomp.common_dirs) > 0:
for item in dircomp.common_dirs:
compareme(os.path.abspath(os.path.join(dir1,item)), os.path.abspath(os.path.join(dir2,item)))
return holderlist
def main():
if len(sys.argv) > 3:
dir1=sys.argv[1]
dir2=sys.argv[2]
dir3=sys.argv[3]
else:
print "Usage: ", sys.argv[0], "currentdir olddir difference"
sys.exit(1)
if not dir3.endswith('/'): dir3=dir3+'/'
source_files=compareme(dir1,dir2)
dir1=os.path.abspath(dir1)
dir3=os.path.abspath(dir3)
destination_files=[]
new_dirs_create=[]
for item in source_files:
destination_files.append(re.sub(dir1, dir3, item) )
for item in destination_files:
new_dirs_create.append(os.path.split(item)[0])
for mydir in set(new_dirs_create):
if not os.path.exists(mydir): os.makedirs(mydir)
#copy pair
copy_pair=zip(source_files,destination_files)
for item in copy_pair:
if os.path.isfile(item[0]):
shutil.copyfile(item[0], item[1])
if __name__ == '__main__':
main()