我想寫一個自定義腳本,將重命名所有的文件中包含的文件名點目錄,遞歸。像: MV 'foo.bar.avi' '富bar.avi'奇怪的行爲與fs.rename:文件刪除(node.js的)
它還轉換目錄的名稱,如 'A.B.C/x.y.z.mp4' 變成了 'A B C/X y.mp4' 並刪除所有下劃線_。
結果中刪除所有該目錄中的文件的結束,只留下一些空目錄,沒有任何通知或錯誤,讓我肯定會輸unbackuped數據大約300 GB。
有精彩的代碼,允許這一壯舉:
var fs = require('fs');
var path = require('path');
var util = require('util');
var fse = require('fs-extra')
var async = require('async');
var walk = function(dir, done) {
var results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
walk(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null, results);
});
} else {
if (file.indexOf('/.') < 0) {
results.push(file);
}
if (!--pending) done(null, results);
}
});
});
});
};
var rename = function(err, filename) {
if (util.isArray(filename)) {
for (var i = 0; i < filename.length; i++) {
rename(err, filename[i]);
}
return;
}
fs.stat(filename, function(err, stat) {
if (!stat.isDirectory()) {
filename2 = filename.split('.');
var extension = filename2.pop();
filename2 = filename2.join(' ').split('_').join(' ') + '.' + extension;
var directory = filename2.split('/');
directory.pop();
directory = directory.join('/');
async.series([
function (callback) {
fse.mkdirs(directory, function (err) {
callback(err, 'fs.mkdirs');
});
},
function(callback) {
fs.rename(filename, filename2, function (err) {
callback(err, 'fs.rename');
});
}
],
function (err, results) {
if (err) {
console.log(err);
}
console.log('All files have been renamed');
});
}
});
}
walk('/Volumes/My Passport/Movies/', function(err, results) {
rename('', results);
});
這是來不及做任何事情,我已經哀悼這方面的損失。
我只是想了解這fs.rename如何能夠刪除的文件。
我不敢相信我做到了。我甚至不生氣,這是驚人的。我的腳本刪除了300gb的數據,甚至沒有一條關於刪除的單個指令。我接受了我的信仰。
我懷疑fs.rename是外部驅動越野車。
謝謝。
哎喲...但爲什麼在未備份的數據上運行未經測試的代碼呢? – Scimonster
好問題。我對我的腳本,節點JS和外部硬盤足夠有信心。現在我知道你不能相信一個旨在重命名某些文件的腳本=) – Charaf
現在我知道,如果NSA聘用了我,我可以刪除他們的所有文件,而他們不知道這些文件是什麼。我是新的斯諾登。 ...(哈哈,Charaf試圖笑,而不是哭) – Charaf