Necesito eliminar solo los archivos json dentro de un directorio (múltiples niveles). Me arriesgaría a adivinar que es posible con fs-unlinkSync (ruta)

Pero no puedo encontrar una solución sin especificar el nombre del archivo individual.

Esperaba resolverlo con lo siguiente ... fs.unlinkSync ('./ desktop / directory / *. Json') pero desafortunadamente el asterisco no lo seleccionaría todo. ¿Alguna sugerencia por favor?

2
Minel Aydın 25 oct. 2019 a las 09:47

1 respuesta

La mejor respuesta

Puede listar archivos usando fs.readdirSync, luego llame a fs.unlinkSync para eliminarlos. Esto se puede llamar de forma recursiva para atravesar un árbol completo.

const fs = require("fs");
const path = require("path");

function deleteRecursively(dir, pattern) {
    let files = fs.readdirSync(dir).map(file => path.join(dir, file));
    for(let file of files) {
        const stat = fs.statSync(file);
        if (stat.isDirectory()) {
            deleteRecursively(file, pattern);
        } else {
            if (pattern.test(file)) {
                console.log(`Deleting file: ${file}...`);
                // Uncomment the next line once you're happy with the files being logged!
                try { 
                    //fs.unlinkSync(file);
                } catch (err) {
                    console.error(`An error occurred deleting file ${file}: ${err.message}`);
                } 
            }
        }
    }
}

deleteRecursively('./some_dir', /\.json$/);

De hecho, dejé la línea que elimina el archivo comentado. Le sugiero que ejecute el script y esté feliz de que los archivos registrados sean los correctos. Luego, descomente la línea fs.unlinkSync para eliminar los archivos.

5
Terry Lennox 25 oct. 2019 a las 08:13