시놀로지 나스를 사용하게 되면서, 나스에게 다운로드를 시키고, 적절한 곳으로 파일을 이용하는 것이 필요했다.
이미 다른 괜찮아 보이는 모듈이 있기는 했는데, 무슨 일인지 잘 설치가 되지 않아 간단하게 스크립트로 개발해봤다.
아래의 코드를 실행하면 /volume1/download라는 디렉터리를 탐색하고, *.mp3, *.avi를 지정한 경로로 파일 이동해준다.
#!/bin/python
#-*- coding: UTF-8 -*-
import os
import fnmatch
import itertools
import shutil
destPattern = []
destDir = []
def add(pattern, dir):
if (os.path.isdir(dir) != True):
return False
destPattern.append(pattern)
if (dir[len(dir) - 1] != os.path.sep):
dir = dir + os.path.sep
destDir.append(dir)
def find_file(path, checkFile):
dirs = os.listdir(path)
for dir in dirs:
p = os.path.join(path, dir)
if (os.path.isdir(p)):
find_file(p, checkFile)
else:
checkFile(dir, p)
def checkFile(name, targetPath):
for pattern, dir in zip(destPattern, destDir):
filtered = fnmatch.fnmatch(name, pattern)
if(True != filtered):
continue;
print("move file from=({0}) to=({1})".format(targetPath, dir + name))
os.system('mv "{0}" "{1}"'.format(targetPath, dir + name))
add('*.mp3', '/volume1/audio')
add('*.avi', '/volume1/video')
find_file('/volume1/download', checkFile)
여기서 파일 이동 명령을 쉘에서 mv 명령을 이용하도록 한 것은, 아직 파이썬을 잘 몰라서 shutil.move 를 써봤는데, 같은 디스크 내에서 파일 이동임에도 복사로 동작했기 때문에, 영상 파일의 이동이 아주 느려서 대안으로 사용했다. Windows 플랫폼이라면 mv를 move 명령으로 바꾸어 사용하면 될 것이다 (경로 구분자 같은거도 바꾸어야 겠죠?)
그리고 정규식보다는 일반인 사용자 기준에서 편하도록 와일드 카드를 사용할 수 있게 했다.
add('DSC*.png', '/volome1/picture/camera')
등 상황에 맞게 사용하면 편할 것 같다.
그리고 끝이 아니다.
이 스크립트는 1회성으로 동작하고 종료하기 때문에 주기적으로 실행해줘야한다.
일반 linux 사용자라면 cron tab에 등록하여 사용하고,
윈도우 사용자라면 pm 이였나? 여튼
각 플랫폼에서 제공하는 스케쥴러에 설정해서 사용해야한다.
나 같은 경우 synology 환경이였기 때문에 작업 스케쥴러에 등록하여 사용했다