요약
이 문서에서는 Nuke 의 자동 저장 기능을 사용자 정의하여 롤링 및 증분 자동 저장 시스템을 구현하는 방법을 설명합니다.
추가 정보
기본적으로 Nuke 작업 중인 현재 파일에 대해 하나의 자동 저장만 유지합니다. 파일 이름은 <scriptname>.nk.autosave 이며 Nuke 기본 설정에 설정된 빈도에 따라 업데이트/덮어쓰기됩니다.
자체 자동 저장 Python 기능을 설정하여 Nuke 의 자동 저장 동작을 사용자 정의할 수 있습니다. 아래 예( Nuke Python 개발자 가이드 )에서는 진행 중인 작업 스크립트의 여러 증분 백업을 저장하기 위해 롤링 자동 저장을 설정합니다.
다음을 수행하여 이를 설정할 수 있습니다.
- 첨부된 autosave.py 파일을 다운로드하여 활성 사용자의 .nuke 디렉토리에 넣습니다: Q100048: Nuke 디렉토리 위치
- $HOME/.nuke 디렉토리 의 init.py 파일에 다음 줄을 추가합니다.
import autosave
참고: .nuke 디렉토리에 init.py 파일이 아직 없는 경우 파일을 만들어야 합니다.
다음에 Nuke 시작하면 다음과 같이 여러 개의 증분 자동 저장 파일이 생성됩니다.
<스크립트 이름>.nk.autosave
<스크립트 이름>.nk.autosave1
<스크립트 이름>.nk.autosave2
<스크립트 이름>.nk.autosave3
까지
<스크립트 이름>.nk.autosave9
충돌이나 손상된 스크립트와 같은 Nuke 관련 문제가 발생하는 경우 각 자동 저장을 로드하여( 파일 > 열기 사용) 문제가 발생하기 전에 스크립트를 찾을 수 있습니다.
추가 읽기
Nuke 사용자 가이드 에는 사용자 정의 Python 스크립트 및 기타 사용자 정의를 로드하는 방법 에 대한 자세한 정보가 있습니다.
Nuke Python 개발자 가이드에는 onAutoSave와 같은 Python 콜백을 사용하는 방법에 대한 자세한 정보가 있습니다.
예제 코드
아래 autosave.py 파일의 내용은 다음과 같습니다.
import nuke
import glob
import time
import os
### Example that implements a rolling autosave using the autoSaveFilter callbacks
###
## autosaves roll from 0-9 eg myfile.autosave, myfile.autosave1, myfile.autosave2...
#
## To use just add 'import nuke scripts.autosave' in your init.py
def onAutoSave(filename):
## ignore untiled autosave
if nuke .root().name() == 'Root':
return filename
fileNo = 0
files = getAutoSaveFiles(filename)
if len(files) > 0 :
lastFile = files[-1]
# get the last file number
if len(lastFile) > 0:
try:
fileNo = int(lastFile[-1:])
except:
pass
fileNo = fileNo + 1
if ( fileNo > 9 ):
fileNo = 0
if ( fileNo != 0 ):
filename = filename + str(fileNo)
return filename
def onAutoSaveRestore(filename):
files = getAutoSaveFiles(filename)
if len(files) > 0:
filename = files[-1]
return filename
def onAutoSaveDelete(filename):
## only delete untiled autosave
if nuke .root().name() == 'Root':
return filename
# return None here to not delete auto save file
return None
def getAutoSaveFiles(filename):
date_file_list = []
files = glob.glob(filename + '[1-9]')
files.extend( glob.glob(filename) )
for file in files:
# retrieves the stats for the current file as a tuple
# (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)
# the tuple element mtime at index 8 is the last-modified-date
stats = os.stat(file)
# create tuple (year yyyy, month(1-12), day(1-31), hour(0-23), minute(0-59), second(0-59),
# weekday(0-6, 0 is monday), Julian day(1-366), daylight flag(-1,0 or 1)) from seconds since epoch
# note: this tuple can be sorted properly by date and time
lastmod_date = time.localtime(stats[8])
#print image_file, lastmod_date # test
# create list of tuples ready for sorting by date
date_file_tuple = lastmod_date, file
date_file_list.append(date_file_tuple)
date_file_list.sort()
return [ filename for _, filename in date_file_list ]
nuke .addAutoSaveFilter( onAutoSave )
nuke .addAutoSaveRestoreFilter( onAutoSaveRestore )
nuke .addAutoSaveDeleteFilter( onAutoSaveDelete )
### As an example to remove the callbacks use this code
#nuke.removeAutoSaveFilter( onAutoSave )
#nuke.removeAutoSaveRestoreFilter( onAutoSaveRestore )
#nuke.removeAutoSaveDeleteFilter( onAutoSaveDelete )
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요