जवाबों:
Seppo0010 टिप्पणी के अनुसार, मैंने ऐसा करने के लिए पुनर्नामित फ़ंक्शन का उपयोग किया।
http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback
frenrename (पुरानेपथ, नयापथ, कॉलबैक)
में जोड़ा गया: v0.0.2
oldPath <String> | <Buffer> newPath <String> | <Buffer> callback <Function>
अतुल्यकालिक नाम (2)। पूर्ण कॉलबैक के लिए संभावित अपवाद के अलावा कोई तर्क नहीं दिया गया है।
इस उदाहरण से लिया गया: एक्शन में Node.js
एक चाल () फ़ंक्शन जो नाम बदल देता है, यदि संभव हो तो, या कॉपी करने के लिए वापस गिर जाता है
var fs = require('fs');
module.exports = function move(oldPath, newPath, callback) {
fs.rename(oldPath, newPath, function (err) {
if (err) {
if (err.code === 'EXDEV') {
copy();
} else {
callback(err);
}
return;
}
callback();
});
function copy() {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close', function () {
fs.unlink(oldPath, callback);
});
readStream.pipe(writeStream);
}
}
मूल रूप से नोड्ज का उपयोग करना
var fs = require('fs')
var oldPath = 'old/path/file.txt'
var newPath = 'new/path/file.txt'
fs.rename(oldPath, newPath, function (err) {
if (err) throw err
console.log('Successfully renamed - AKA moved!')
})
(नोट: "यह काम नहीं करेगा यदि आप विभाजन को पार कर रहे हैं या चलती फ़ाइलों का समर्थन नहीं करने वाले आभासी फाइल सिस्टम का उपयोग कर रहे हैं। [...]" - फ्लाविएन वोल्केन सिपाही 2 '15 12:50 बजे "
एमवी नोड मॉड्यूल का उपयोग करें जो पहले एक करने की कोशिश करेगा fs.rename
और फिर कॉपी करने और फिर अनलिंक करने के लिए कमबैक करेगा।
mv
नोड मॉड्यूल के लेखक प्रतीत होते हैं । मैं स्थापित करने के लिए npm का उपयोग करना पसंद करता हूं; npm install mv --save-dev
; यहाँ एक npm लिंक है
util.pump
नोड 0.10 में पदावनत है और चेतावनी संदेश उत्पन्न करता है
util.pump() is deprecated. Use readableStream.pipe() instead
तो धाराओं का उपयोग करके फ़ाइलों की प्रतिलिपि बनाने के लिए समाधान है:
var source = fs.createReadStream('/path/to/source');
var dest = fs.createWriteStream('/path/to/dest');
source.pipe(dest);
source.on('end', function() { /* copied */ });
source.on('error', function(err) { /* error */ });
नाम बदलें फ़ंक्शन का उपयोग करना:
fs.rename(getFileName, __dirname + '/new_folder/' + getFileName);
कहाँ पे
getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName
यह मानते हुए कि आप फ़ाइल का नाम अपरिवर्तित रखना चाहते हैं।
fs-extra
मॉड्यूल आप इसे के साथ ऐसा करने की अनुमति देता है move()
विधि। मैंने पहले ही इसे लागू कर दिया है और यह अच्छी तरह से काम करता है यदि आप पूरी तरह से एक निर्देशिका से दूसरे में फ़ाइल स्थानांतरित करना चाहते हैं - यानी। स्रोत निर्देशिका से फ़ाइल निकाल रहा है। ज्यादातर बुनियादी मामलों के लिए काम करना चाहिए।
var fs = require('fs-extra')
fs.move('/tmp/somefile', '/tmp/does/not/exist/yet/somefile', function (err) {
if (err) return console.error(err)
console.log("success!")
})
यहाँ use.pump का उपयोग करके एक उदाहरण दिया गया है, >> मैं Node.js में किसी भिन्न विभाजन या डिवाइस में फ़ाइल कैसे स्थानांतरित करूँ?
var fs = require('fs'),
util = require('util');
var is = fs.createReadStream('source_file')
var os = fs.createWriteStream('destination_file');
util.pump(is, os, function() {
fs.unlinkSync('source_file');
});
fs.rename()
(एक फ़ाइल का नाम बदलकर और इसे उसी चीज़ के रूप में ले जाना)।
8.0.0 से अधिक नोड संस्करणों के लिए वादों का उपयोग करना:
const {promisify} = require('util');
const fs = require('fs');
const {join} = require('path');
const mv = promisify(fs.rename);
const moveThem = async () => {
// Move file ./bar/foo.js to ./baz/qux.js
const original = join(__dirname, 'bar/foo.js');
const target = join(__dirname, 'baz/qux.js');
await mv(original, target);
}
moveThem();
fs.rename
यदि आप डॉकर वातावरण में वॉल्यूम के साथ बस एक शब्द भी काम नहीं करते हैं।
async
घोषणा जोड़ें moveThem
।
जैसा कि ऊपर दिए गए उत्तर में कहा गया है, मेरे 2 सेंट : कॉपी () विधि का उपयोग नहीं किया जाना चाहिए, मामूली समायोजन के बिना फ़ाइलों की प्रतिलिपि बनाने के लिए:
function copy(callback) {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
// Do not callback() upon "close" event on the readStream
// readStream.on('close', function () {
// Do instead upon "close" on the writeStream
writeStream.on('close', function () {
callback();
});
readStream.pipe(writeStream);
}
एक वादा में लिपटे प्रतिलिपि समारोह:
function copy(oldPath, newPath) {
return new Promise((resolve, reject) => {
const readStream = fs.createReadStream(oldPath);
const writeStream = fs.createWriteStream(newPath);
readStream.on('error', err => reject(err));
writeStream.on('error', err => reject(err));
writeStream.on('close', function() {
resolve();
});
readStream.pipe(writeStream);
})
हालाँकि, ध्यान रखें कि यदि लक्ष्य फ़ोल्डर मौजूद नहीं है, तो फ़ाइल सिस्टम क्रैश हो सकता है।
मैं सभी शामिल कार्यों को अलग हैं (यानी rename
, copy
, unlink
) निश्चित रूप से, लचीलापन और promisify सब कुछ हासिल करने के लिए एक दूसरे से:
const renameFile = (path, newPath) =>
new Promise((res, rej) => {
fs.rename(path, newPath, (err, data) =>
err
? rej(err)
: res(data));
});
const copyFile = (path, newPath, flags) =>
new Promise((res, rej) => {
const readStream = fs.createReadStream(path),
writeStream = fs.createWriteStream(newPath, {flags});
readStream.on("error", rej);
writeStream.on("error", rej);
writeStream.on("finish", res);
readStream.pipe(writeStream);
});
const unlinkFile = path =>
new Promise((res, rej) => {
fs.unlink(path, (err, data) =>
err
? rej(err)
: res(data));
});
const moveFile = (path, newPath, flags) =>
renameFile(path, newPath)
.catch(e => {
if (e.code !== "EXDEV")
throw new e;
else
return copyFile(path, newPath, flags)
.then(() => unlinkFile(path));
});
moveFile
केवल एक सुविधा समारोह है और हम कार्यों को अलग से लागू कर सकते हैं, जब, उदाहरण के लिए, हमें महीन दाने वाले अपवाद से निपटने की आवश्यकता होती है।
Shelljs एक बहुत ही उपयोगी उपाय है।
कमांड: एमवी ([विकल्प, स्रोत, गंतव्य)
उपलब्ध विकल्प:
-f: बल (डिफ़ॉल्ट व्यवहार)
-n: ओवरराइटिंग को रोकने के लिए
const shell = require('shelljs');
const status = shell.mv('README.md', '/home/my-dir');
if(status.stderr) console.log(status.stderr);
else console.log('File moved!');
यह एक छोटे से कम अस्पष्ट नाम के साथ टोमन शिपाही के उत्तर का एक पुनर्विचार है , और इसे कॉल करने का प्रयास करने से पहले कोड को परिभाषित करने के डिजाइन के राजकुमार का अनुसरण करें। (जबकि नोड आपको अन्यथा करने की अनुमति देता है, घोड़े के सामने गाड़ी रखना अच्छा नहीं है।)
function rename_or_copy_and_delete (oldPath, newPath, callback) {
function copy_and_delete () {
var readStream = fs.createReadStream(oldPath);
var writeStream = fs.createWriteStream(newPath);
readStream.on('error', callback);
writeStream.on('error', callback);
readStream.on('close',
function () {
fs.unlink(oldPath, callback);
}
);
readStream.pipe(writeStream);
}
fs.rename(oldPath, newPath,
function (err) {
if (err) {
if (err.code === 'EXDEV') {
copy_and_delete();
} else {
callback(err);
}
return;// << both cases (err/copy_and_delete)
}
callback();
}
);
}
नीचे दिए गए URL की सहायता से, आप अपनी फ़ाइल CURRENT स्रोत को गंतव्य स्रोत पर कॉपी या स्थानांतरित कर सकते हैं
/*********Moves the $file to $dir2 Start *********/
var moveFile = (file, dir2)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
//gets file name and adds it to dir2
var f = path.basename(file);
var dest = path.resolve(dir2, f);
fs.rename(file, dest, (err)=>{
if(err) throw err;
else console.log('Successfully moved');
});
};
//move file1.htm from 'test/' to 'test/dir_1/'
moveFile('./test/file1.htm', './test/dir_1/');
/*********Moves the $file to $dir2 END *********/
/*********copy the $file to $dir2 Start *********/
var copyFile = (file, dir2)=>{
//include the fs, path modules
var fs = require('fs');
var path = require('path');
//gets file name and adds it to dir2
var f = path.basename(file);
var source = fs.createReadStream(file);
var dest = fs.createWriteStream(path.resolve(dir2, f));
source.pipe(dest);
source.on('end', function() { console.log('Succesfully copied'); });
source.on('error', function(err) { console.log(err); });
};
//example, copy file1.htm from 'test/dir_1/' to 'test/'
copyFile('./test/dir_1/file1.htm', './test/');
/*********copy the $file to $dir2 END *********/
यदि आप नोड.जेएस स्रोत फ़ाइल को स्थानांतरित करने या नाम बदलने का प्रयास कर रहे हैं, तो इस https://github.com/viruschidai/node-mv पर प्रयास करें । यह उस फाइल के संदर्भ को अन्य सभी फाइलों में अपडेट करेगा।
आप उपयोग कर सकते हैं move-file
npm पैकेज का :
पहले पैकेज स्थापित करें:
$ npm install move-file
उपयोग:
const moveFile = require('move-file');
// moveFile Returns a Promise that resolves when the file has been moved
moveFile('source/unicorn.png', 'destination/unicorn.png')
.then(() => {/* Handle success */})
.catch((err) => {/* Handle failure */});
// Or use async/await
(async () => {
try {
await moveFile('source/unicorn.png', 'destination/unicorn.png');
console.log('The file has been moved');
} catch (err) {
// Handle failure
console.error(err);
}
})();