uso recursive-readdir para leer un directorio y sus subdirectorios como este:
const fse = require('fs-extra') const recursive = require('recursive-readdir'); const inputFolder = './input'; const files = await recursive(inputFolder)luego filtro los archivos obtenidos de esta manera:
const fileteredFiles = files.filter((f) => f.includes('.gif'));i console.log(filteredFiles) y este es el resultado:
[ 'input/background/black.gif', 'input/background/grey.gif',]ahora quiero copiar black.gif y grey.gif a otro directorio, probé esto:
fse.copyFileSync(fileteredFiles, 'outputDir')me sale este error:
TypeError [ERR_INVALID_ARG_TYPE]: The "src" argument must be one of type string, Buffer, or URL. Received type object at Object.copyFileSync (fs.js:1719:3)así que indíqueme la forma correcta de obtener archivos filtrados y copiarlos en otro directorio.
cualquier ayuda sería muy apreciada.
¿Leíste el mensaje de error?
TypeError [ERR_INVALID_ARG_TYPE]: The "src" argument must be one of type string, Buffer, or URL. Received type object
at Object.copyFileSync (fs.js:1719:3) Está pasando una lista/matriz de cadenas a fse.fileCopySync() , en lugar de una sola cadena. Prueba algo como:
for (const fn of filterFiles) { fse.copyFileSync( fn , 'outputdir' ); }No está utilizando fs.copyFileSync correctamente de dos maneras distintas:
El primer argumento de fs.copyFileSync() debe ser la ruta del archivo de origen. Está intentando pasar una serie de rutas de archivos. Así no es como funciona. Debe llamar a fs.copyFileSync() para UN archivo individual.
El segundo argumento de fs.copyFileSync() debe ser la ruta del archivo de destino, NO una ruta de directorio.
Tenga en cuenta que incluso si intenta usar la versión fs-extra llamada fs.copySync() , dice esto:
si src es un archivo, dest no puede ser un directorio
Por lo tanto, para corregir su uso de fs.copyFileSync() , debe llamarlo para cada archivo que desee copiar y debe crear la ruta del archivo de destino adecuada (y no pasar solo el directorio de destino).
Nota: Se agregó al nodo v16 una interfaz experimental para copiar varios archivos de una ubicación a otra con fs.cpSync() , fs.cp() o fs.promises.cp() . También puede probar esa nueva interfaz, ya que hará una copia recursiva por usted y ofrece una función de filtro para que pueda restringirla solo a archivos GIF si lo desea.