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,并且不在文件列表中前进。