es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Copiar todos los archivos de una extensión particular a una carpeta separada, manteniendo la estructura de carpetas (recursivo)

Tarea sencilla: Tengo una carpeta anidada de código arbitrario que contiene archivos CSS en cualquier carpeta particular. Quiero un comando que copie esos archivos (y solo esos archivos) en una nueva carpeta, reproduciendo la misma estructura de carpetas en la que estaban.

Cualquier comando de shell o de nodo estaría bien.

Por ejemplo, dado esto:

src/folder1/file1.css
src/folder1/… otros archivos…
src/folder2/subfolder/file2.css
src/folder2/subfolder/X/Y/Z/file.css
src/folder3/whatever.html
src/folder4/blah.html

el comando generaría lo siguiente:
dist/folder1/file1.css
dist/folder2/subfolder/file2.css
dist/folder2/subfolder/X/Y/Z/file.css

¿Alguna idea?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Comando shell:

    find src -name "*.css" -exec cp --parents {} dist \;
    

    Comando de Node:

    const fs = require('fs');
    const path = require('path');
    
    const srcDir = 'src';
    const distDir = 'dist';
    
    function copyFiles(src, dest) {
      const files = fs.readdirSync(src);
    
      files.forEach(file => {
        const srcPath = path.join(src, file);
        const destPath = path.join(dest, file);
    
        if (fs.statSync(srcPath).isDirectory()) {
          fs.mkdirSync(destPath);
          copyFiles(srcPath, destPath);
        } else if (path.extname(srcPath) === '.css') {
          fs.copyFileSync(srcPath, destPath);
        }
      });
    }
    
    copyFiles(srcDir, distDir);
    

Comments are closed.