토렌트에서 받은 파일을 다운로드 디렉토리에서 원하는 곳으로 일일이 옮기는 것은 정말 귀찮은 작업입니다.
자동화 하기 위해 간단한 node.js 모듈을 만들어 보았습니다.
이 모듈은 현재 홈서버에서 forever로 항시 동작하고 있습니다.
var fs = require(‘fs’);
var path = require(‘path’);
var torrentDir = ‘/data/torrent/’;
var completeDir = path.join(torrentDir, ‘complete’);
var mediaDir = ‘/data/media/’;
var tvDir = path.join(mediaDir, ‘TV’);
var workingFilename = {};
var dirMap = {};
dirMap[path.join(tvDir, ‘개그콘서트’)] = /개그.*콘서트|개콘/;
dirMap[path.join(tvDir, ‘무한도전’)] = /무한.*도전/;
dirMap[path.join(tvDir, ‘힐링캠프’)] = /힐링.*캠프/;
dirMap[path.join(tvDir, ‘슈퍼스타K4’)] = /슈퍼.*스타.*[kK].*4/;
dirMap[path.join(tvDir, ‘대왕의꿈’)] = /대왕의.*꿈/;
dirMap[path.join(tvDir, ‘대풍수’)] = /대풍수/;
fs.watch(completeDir, function(action, filename) {
for (dir in dirMap) {
var regExp = dirMap[dir];
var targetDir = dir;
if (regExp.test(filename)) {
if (!workingFilename[filename]) {
var fromPath = path.join(completeDir, filename);
var toPath = path.join(targetDir, filename);
workingFilename[filename] = toPath;
setTimeout(function() {
fs.rename(fromPath, toPath, function(err) {
if (!err)
console.log(filename + ‘: success’);
else
console.log(filename + ‘: fail, ‘ + err);
setTimeout(function() {
delete workingFilename[filename];
}, 5000);
});
}, 5000);
}
break;
}
}
});
코드에 대해서 간단히 설명드리자면, 동일한 파일에 대하여 중복으로 fs.watch()가 callback을 불러주는 문제를 피하기 위하여 workingFilename이라는 map을 활용하고 있고, 파일이 생성되고 저장되고 옮겨지는 등의 시간차를 감안하여 setTimeout()을 적절히 활용하였습니다.