ENOENT:Node.js 脚本,fs.rename,用于将文件从 1 个文件夹分割并移动到多个其他文件夹
ENOENT: Node.js script, fs.rename, to divide and move files from 1 folder to multiple other folders
我受困于我的脚本。
我的目标是:我有一个图像文件夹,想将它们划分并移动到多个其他文件夹(它们始终存在)。
文件夹限制为 200 个文件,在我的循环中,在第一个文件夹成功填充 200 个文件后,在第二个文件夹的第二个文件中,我总是得到错误:
Error: ENOENT: no such file or directory, rename '/home/.../chunkDirsMoveFiles/input/resize/20150818_051550_web.jpg' -> './output/dir_2/20150818_051550_web.jpg'] {
errno: -2,
code: 'ENOENT',
syscall: 'rename',
path: '/home/.../chunkDirsMoveFiles/input/resize/20150818_051550_web.jpg',
dest: './output/dir_2/20150818_051550_web.jpg'
}
我的代码(我想问题通常从 currentdir = 1 开始):
const { clear } = require("console");
const fs = require("fs")
const path = require("path")
// const { fileSystemHelper } = require('../allhelpers/fileSystemHelper.js')
const dirLimit = 200
clear()
// Fn to get all file paths of the input folder
const getAllFiles = function(dirPath, arrayOfFiles) {
files = fs.readdirSync(dirPath)
arrayOfFiles = arrayOfFiles || []
files.forEach(function(file) {
if (fs.statSync(dirPath + "/" + file).isDirectory()) {
arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles)
} else {
arrayOfFiles.push(path.join(__dirname, dirPath, "/", file))
}
})
return arrayOfFiles
}
const images = getAllFiles("input/resize")
const dirAmount = Math.round(images.length/dirLimit)
for (let i = 0; i < dirAmount; i++) {
fs.mkdir(`./output/dir_${i + 1}`, function(err) {
// if (err) {
// console.log(err)
// } else {
// console.log("New directory successfully created.")
// }
})
}
currentDir = 1
for (let i = 0; i < dirAmount; i++) {
for (let k = 0; k < dirLimit; k++) {
const theFilePath = images[k].split('/')
const newPath = theFilePath[(theFilePath.length)-1]
fs.rename(images[k], `./output/dir_${currentDir}/${newPath}`, function (err) {
if (err) throw err
console.log('Successfully renamed/moved!')
})
}
currentDir += 1
}
查看循环:对于每个目录,您最多获取 < dirLimit
个文件并将它们全部移动到该目录(因此前 200 个文件)。然后,对于下一个目录,循环执行相同的操作:从数组的开头获取 200 个文件……但是,嘿!这些文件已移至上一次迭代中的上一个目录。
循环不使用 i
,并且不在文件列表中前进。
我受困于我的脚本。 我的目标是:我有一个图像文件夹,想将它们划分并移动到多个其他文件夹(它们始终存在)。 文件夹限制为 200 个文件,在我的循环中,在第一个文件夹成功填充 200 个文件后,在第二个文件夹的第二个文件中,我总是得到错误:
Error: ENOENT: no such file or directory, rename '/home/.../chunkDirsMoveFiles/input/resize/20150818_051550_web.jpg' -> './output/dir_2/20150818_051550_web.jpg'] {
errno: -2,
code: 'ENOENT',
syscall: 'rename',
path: '/home/.../chunkDirsMoveFiles/input/resize/20150818_051550_web.jpg',
dest: './output/dir_2/20150818_051550_web.jpg'
}
我的代码(我想问题通常从 currentdir = 1 开始):
const { clear } = require("console");
const fs = require("fs")
const path = require("path")
// const { fileSystemHelper } = require('../allhelpers/fileSystemHelper.js')
const dirLimit = 200
clear()
// Fn to get all file paths of the input folder
const getAllFiles = function(dirPath, arrayOfFiles) {
files = fs.readdirSync(dirPath)
arrayOfFiles = arrayOfFiles || []
files.forEach(function(file) {
if (fs.statSync(dirPath + "/" + file).isDirectory()) {
arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles)
} else {
arrayOfFiles.push(path.join(__dirname, dirPath, "/", file))
}
})
return arrayOfFiles
}
const images = getAllFiles("input/resize")
const dirAmount = Math.round(images.length/dirLimit)
for (let i = 0; i < dirAmount; i++) {
fs.mkdir(`./output/dir_${i + 1}`, function(err) {
// if (err) {
// console.log(err)
// } else {
// console.log("New directory successfully created.")
// }
})
}
currentDir = 1
for (let i = 0; i < dirAmount; i++) {
for (let k = 0; k < dirLimit; k++) {
const theFilePath = images[k].split('/')
const newPath = theFilePath[(theFilePath.length)-1]
fs.rename(images[k], `./output/dir_${currentDir}/${newPath}`, function (err) {
if (err) throw err
console.log('Successfully renamed/moved!')
})
}
currentDir += 1
}
查看循环:对于每个目录,您最多获取 < dirLimit
个文件并将它们全部移动到该目录(因此前 200 个文件)。然后,对于下一个目录,循环执行相同的操作:从数组的开头获取 200 个文件……但是,嘿!这些文件已移至上一次迭代中的上一个目录。
循环不使用 i
,并且不在文件列表中前进。