답변:
seppo0010 주석에 따르면 이름 바꾸기 기능을 사용했습니다.
http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback
fs.rename (oldPath, newPath, 콜백)
추가 : v0.0.2
oldPath <String> | <Buffer> newPath <String> | <Buffer> callback <Function>
비동기 이름 바꾸기 (2). 완료 콜백에는 가능한 예외 이외의 인수가 제공되지 않습니다.
이 예제는 Node.js in Action 에서 가져온 것입니다.
가능한 경우 이름을 바꾸거나 복사로 이동하는 move () 함수
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);
}
}
기본적으로 nodejs 사용
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!')
})
(참고 : "파티션을 가로 지르거나 파일 이동을 지원하지 않는 가상 파일 시스템을 사용하는 경우에는 작동하지 않습니다. [...]" – Flavien Volken 9 월 2 일 15시 12 분 50 초 "
먼저 mv 노드 모듈을 사용하여 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!")
})
다음은 util.pump를 사용하는 예제입니다. >> Node.js에서 파일 a를 다른 파티션이나 장치로 어떻게 이동합니까?
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보다 큰 Node 버전에 대한 약속 사용 :
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
볼륨이있는 Docker 환경에있는 경우 주의 할 사항 이 없습니다.
async
선언을 추가하십시오 moveThem
.
위 의 답변 에서 언급 한대로 내 2 센트 : copy () 메서드는 약간의 조정없이 파일을 복사하는 데 그대로 사용해서는 안됩니다.
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
)을 서로 분리 하여 유연성을 확보하고 모든 것을 약속합니다.
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
예를 들어,보다 세밀한 예외 처리가 필요한 경우 함수를 개별적으로 적용 할 수 있습니다.
이것은 약간 덜 모호한 이름을 가진 teoman shipahi의 대답 을 다시 해시 하고 코드를 호출하기 전에 코드를 정의하는 디자인 원칙을 따릅니다 . (노드가 달리 할 수는 있지만 말 앞에 카트를 두는 것은 좋지 않습니다.)
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의 도움으로 파일을 복사하거나 대상 소스로 옮길 수 있습니다
/*********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 *********/
node.js 소스 파일을 이동하거나 이름을 바꾸려면 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);
}
})();