파일 정리 스트립트 (clone)
요구사항
- pictures라는 폴더 안에 videos, photos가 있다.
- mp4, mov 확장자 동영상 파일은 videos 폴더로 이동.
- png, aae 확장자 파일들은 captured 폴더로 이동.
- IMG_0000(원본파일)와 IMG_E0000(수정파일)가 있다는 경우라면
1) 편집한 사진인 E가 있는 파일명은 그대로 보관.
2) 편집하지 않은 IMG_0000는 duplicated 폴더로 이동. - 편집본이 없는 IMG_0000의 경우는 그대로 보관.
계획
- 사용자가 원하는 폴더의 이름을 받아온다.
- 그 폴더 안에서 videos, catpured, duplicated 폴더를 생성한다.
- 폴더 안에 있는 파일들을 돌면서 해당하는 폴더로 이동시키다.
구현
import path from 'path';
import fs from 'fs';
import { promises as fsPromises } from 'fs';
import process from 'process';
const __dirname = path.resolve();
let folder = process.argv[2];
let basefile = path.join(__dirname, '..', 'pictures', folder);
// 없는 폴더를 입력하였거나 잘못된 폴더를 입력하였다면 적절한 메시지를 보내준다.
if (!folder || !fs.existsSync(basefile)) {
console.error('please enter folder name in pictures');
}
const makeDir = (folder) => {
let folderDir = path.join(basefile, folder);
// 이미 존재했을 때를 먼저 처리해준다.
!fs.existsSync(folderDir) && fsPromises.mkdir(folderDir).catch(console.error);
};
const moveFile = (dir, file) => {
// 이동 파일에 대한 정보를 제공한다.
console.info(`move ${file} to ${dir}`);
let oldpath = path.join(basefile, file);
let newpath = path.join(basefile, dir, file);
fsPromises.rename(oldpath, newpath).catch(console.error);
};
fsPromises
.readdir(basefile)
.then((file) => {
makeDir('videos');
makeDir('captured');
makeDir('duplicated');
return file;
})
.then((file) => {
file.forEach((v) => {
if (path.extname(v) === '.mp4' || path.extname(v) === '.mov') {
moveFile('videos', v);
} else if (path.extname(v) === '.png' || path.extname(v) === '.aae') {
moveFile('captured', v);
} else if (
!v.includes(`IMG_E`) &&
v.includes(`IMG_`) &&
file.includes(`IMG_E${v.slice(4)}`)
) {
moveFile('duplicated', v);
}
});
})
.catch(console.error);
Author And Source
이 문제에 관하여(파일 정리 스트립트 (clone)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ellie12/파일-정리-스트립트-clone저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)