자동화 스크립트
node에서는 file, os, path 등의 모듈을 제공해주고있습니다.
즉, 파일시스템을 다룰 수 있다는 것이죠.
'업무자동화'라는 말을 들어보셨나요?
python으로 자동화 스크립트를 만들거나, 판매하는 경우를 종종보았는데요
python은 보다 간편하고 쉬운 문법으로 이런 라이브러리를 제공합니다.
하지만 javascript도 가능하다는 사실!
비교해보면 python코드가 더 쉽게느껴지겠지만 ,js에 익숙한 개발자라면 다르겠죠?
흔히 크롤링과같은 작업도 node환경에서 충분히 가능합니다
아래의 예시는 사진을 폴더별로 구분하는 스크립트입니다.
혼잡한 우리의 갤러리를 비디오, 캡쳐화면, 원본이미지, 수정이미지 별로 구분해주도록 동작합니다.
여기서 필요한 것은 file을 읽고, 옮기는 fs 모듈과
경로를 읽어내는 path 모듈이 필요합니다.
저는 에러핸들링을 위해서 exit도 사용했네요!
예시 코드
const fs = require("fs").promises;
const path = require("path");
const { exit } = require("process");
/**
* 분류 기준
*
* 비디오 : mp4, mov
* 캡쳐 : png, aae
* 원본 이미지(E 없음) : jpg
* 수정된 이미지(E 있음) : 그대로 유지 jpg
*/
const args = process.argv.slice(2);
const targetFolder = args[0];
if (!targetFolder) {
console.error("타켓 폴더를 입력해주세요");
exit();
}
main();
async function main() {
try {
await fs.readdir(targetFolder);
} catch (e) {
console.log("존재하지 않는 폴더입니다");
return;
}
//1.args[0] 의 폴더를 타겟으로한다.
//2.args[0] 폴더내의 파일을 모두 읽는다.
const fileList = (await fs.readdir(targetFolder)).slice(1);
//3.확장자 별로 분류하여 폴더에 넣는다.(동영상, 이미지, 캡쳐)
// 폴더 생성
try {
await fs.mkdir(`${targetFolder}/video`);
await fs.mkdir(`${targetFolder}/captured`);
await fs.mkdir(`${targetFolder}/duplicated`);
} catch (e) {}
fileList.forEach((file) => {
//4.jpg일 경우 E가 포함된지 확인한다. (있으면 수정된 파일임으로, E가 없는 동일한 파일을 원본폴더로 이동시킨다)
const extension = path.extname(`./${targetFolder}/${file}`);
if (extension == ".mp4" || extension == ".mov") {
fs.rename(`./${targetFolder}/${file}`, `./${targetFolder}/video/${file}`);
console.log(`${file} 이 video 폴더로 이동 되었습니다`);
}
if (extension == ".png" || extension == ".aae") {
fs.rename(`./${targetFolder}/${file}`, `./${targetFolder}/captured/${file}`);
console.log(`${file} 이 captured 폴더로 이동 되었습니다`);
}
if (extension == ".jpg") {
const isEdited = /E/g.test(file);
if (!isEdited) {
fs.rename(`./${targetFolder}/${file}`, `./${targetFolder}/duplicated/${file}`);
console.log(`${file} 이 duplicated 폴더로 이동 되었습니다`);
}
}
});
}
반응형
'Archive' 카테고리의 다른 글
[17] status code (0) | 2022.04.03 |
---|---|
[16] HTTP (0) | 2022.04.03 |
[14] npm (0) | 2022.03.31 |
[13] pipe (0) | 2022.03.30 |
[12] stream (0) | 2022.03.30 |