需求來源于生活。
在日常開發中,經常會頻繁地做一些重復性的操作,作為一名程序員,解放雙手的時刻到了。
比如說:批量修改某些文件的后綴,我對于一些shell或者win下的命令不是很熟悉,稍微了解的就是自己的開發語言,所以用熟悉的工具做事還是可以帶來一些成就感的。
下面我準備針對這個小小的需求開發一個自己的命令行,當然如果能幫助到其他人,那就更加地滿足了。閑話不多說,下面直接開始。
需求整理
- 可以對某個文件夾下的所有文件進行后綴的修改
- 可以限定某類后綴修改為指定的后綴
- 可以指定目標文件夾
- 同時可以隨機重命名
準備
環境 : nodejs
編輯工具 : sublime
大體流程
- 在github上創建自己想要的倉庫changeext(命名)
- 將倉庫clone到本地進行開發、測試
- 發布到github
- 發布到npm
- 安裝到本地進行使用大功告成
步驟分解
一些帳號注冊、倉庫創建就不再說了,主要說下開發的具體流程 先來一段偽代碼:
1.確定目標文件夾、一些相關的參數(是否重命名、源后綴、目標后綴)
2.獲得目標文件夾下的所有文件(符合源后綴)
3.對符合條件的文件進行重命名(修改后綴)
4.結束,對,流程很簡單,實現起來也不麻煩,但是起碼這是自己的小工具啊,哪怕網上再多也是別人的
開發中使用的module:
minimist(命令行參數處理)
fs(操作文件)
path(處理文件路徑)
colors(讓打印信息更加好看)
核心代碼如下:
#!/usr/bin/env node
//作為命令行工具,第一行就是上面的這貨,千萬別少了
var fs = require('fs');
var path = require('path');
var colors = require('colors');
//指定一些顏色信息
colors.setTheme({
error : 'red',
success : 'green',
info : 'yellow'
});
//獲得命令行的參數
var argv = require("minimist")(process.argv.slice(2), {
alias: {
'input': 'i',
'target': 't',
'directory': 'd',
'loop' : 'l',
'random' : 'r'
},
string: ['input', 'target','directory'],
boolean : ['loop','random'],
'default': {
'directory': process.cwd()
}
});
//打印幫助信息
if (argv.help) {
console.log("Usage:".info);
console.log(" changeext --help // print help information".success);
console.log(" changeext txt js // change 'txt' to 'js' ".success);
console.log(" changeext -i txt // input file extensions".success);
console.log(" changeext -t js // target file extensions".success);
console.log(" changeext -d /home/ // target directory for change".success);
console.log(" changeext -l // loop file directory for change file extensions".success);
console.log(" changeext txt js -r // get some random name");
process.exit(0);
}
//隨機獲得一個隨機字符串
function getRandom(){
var counter = 0;
return (function() {
var guid = (+new Date()).toString( 32 ),i = 0;
for ( ; i < 5; i++ ) {
guid += Math.floor( Math.random() * 65535 ).toString( 32 );
}
return guid + (counter++).toString( 32 );
})();
}
//重命名
function rename (folderPath,input,target,loop){
fs.stat(folderPath,function(err,stats){
if(err){
console.log(err);
}else{
if(stats.isDirectory()){
if(loop === true && argv.loop === false){
return false;
}
if(loop === false && argv.loop === false){//不需要循環,但是目標路徑為文件夾
loop = true;
}
fs.readdir(folderPath,function(err2,files){
if(err2){
console.log(err2);
}else{
if(files && files.length > 0){
files.forEach(function(filename,index){
rename(path.join(folderPath,filename),input,target,loop);
});
}
}
});
}else{
var extname = path.extname(folderPath);
input = input.startsWith('.') || input == '' ? input : '.'+input;
target = target.startsWith('.') || target == '' ? target : '.'+target;
extname = extname.toLowerCase();
input = input.toLowerCase();
target = target.toLowerCase();
if(extname === input){
var newPath = "";
if(argv.random){
var randomName = getRandom() + target;
newPath = path.join(path.dirname(folderPath),randomName);
}else{
newPath = folderPath.substring(0,folderPath.length - extname.length) + target;
}
fs.rename(folderPath,newPath,function(err){
if(err){
console.log(err);
}else{
console.log('Rename file : '+folderPath.info +' => '+newPath.info+' success.'.success);
}
});
}
}
}
});
}
//校驗
if(argv.directory && fs.existsSync(argv.directory)){
if( (argv.input && argv.target) || (argv.input === '' && argv.target) || (argv.input && argv.target === '') ){
rename(argv.directory,argv.input,argv.target,argv.loop);
}else{
if(argv._[0] && argv._[1]){
rename(argv.directory,argv._[0],argv._[1]);
}else{
console.log('input file extensions and target file extensions must be not empty.'.error);
process.exit(0);
}
}
}else{
console.log('directory is not exists.'.error);
process.exit(0);
}
然后我們就針對代碼進行本地測試
image.png
OK,測試成功,然后把代碼發布到github(此處流程可以google),然后將自己的代碼發布到npm官網。
npm publish
//這里經常出問題
//1.首先,要注冊一個npm官網的帳號。
//2.然后登錄
npm login
//3.確認帳號
npm whoami
//4.發布即可。 有時候會發布報錯,可能的原因是 registry 改過了,只需要再改回來即可。
//npm config set registry http://registry.npmjs.org
npm publish
然后,我們就可以開心地下載自己的工具來666了。
命令行工具:changeext
本文中的命令行工具為 changeext
可以很方便地變更指定后綴到目標后綴或重命名,同時附帶了一個簡單的加密,可以悄悄地隱藏文件咯,比如:
//全局安裝
npm i changeext -g
//將mp4 修改為 bin文件,并做簡單加密。默認是在當前執行命令的目錄下查找并執行
changeext mp4 bin -e
//如果要修改回來則是
changeext bin mp4 -e
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。
發表評論
請登錄后評論...
登錄后才能評論