node.jsでファイル移動する方法について調べたのですが、あまり良い情報がなかったので記事にします。
よく出てくるのが、fs.renameSync
を使う方法
import fs from "fs";
fs.renameSync('/home/hello.txt', '/tmp/world.txt');
renameというメソッド名にもかかわらずファイル移動も出来ちゃうのですが、弱点があってLinuxだとパーティションを跨ぐとエラーになります。Windowsだとドライブを跨ぐと下記のようなエラーになります。
Error: EXDEV: cross-device link not permitted
node.jsの公式サイトの説明
https://nodejs.org/docs/latest/api/fs.html#fsrenamesyncoldpath-newpath
解決策としては、パーティションやドライブを跨ぐ移動をしたときは下記のようなメソッドを作成すると良さそうです。
import fs from "fs";
function moveFile(oldPath, newPath) {
fs.copyFileSync(oldPath, newPath);
fs.unlinkSync(oldPath);
}
使うとき
moveFile('/home/hello.txt', '/tmp/world.txt');
単純にコピーして削除するだけですが、シンプルイズベストな解決策かと思います。(^^)
誰かのお役に立てれば幸いです。
エンジニアに役立つ情報をTwitterでも発信していますので宜しければTwitterの方もフォローをよろしくお願いします!
Twitterへのリンクはコチラ