Как найти все файлы в одном каталоге, которые совпадают с файлами в другом каталоге в gulp, используя del? - PullRequest
0 голосов
/ 11 февраля 2020

В основном, как часть моей чистой задачи, я хотел бы автоматически удалить из папки root все файлы, которые находятся в моей папке sr c. Поскольку в root есть файлы, которых нет в sr c, я не могу просто удалить их все, и я бы хотел, чтобы процесс оставался динамическим c (автоматически определять соответствующие файлы), а не руководство (в явном виде список файлов для удаления).

Прямо сейчас я делаю это вручную:

const deleteViewFiles = done => {
  del.sync([
    './page-*.php',
    './header.php',
  ]);
  done();
}

Но то, что я хотел бы, посмотрите на ./src/views/, найти все прямые потомки ./src/views/ (не подпапки), и удалите их в root.

например. Допустим, в ./src/views/ у меня есть page-1.php, header.php, my-dog.php, mermaid.html, я хочу удалить все эти файлы из root, не перечисляя их в моей задаче удаления.

1 Ответ

0 голосов
/ 11 февраля 2020

OK. Вот что я в итоге сделал.

Я использовал glob для хранения всех файлов в моем каталоге sr c в массиве.

Затем я заменил базовый путь к папке просмотра на root базовый путь. Затем я использовал этот массив в качестве аргумента для моей функции del.

(I stored paths in a config file, here's a snippet (the real object is much bigger):)
paths = {
  views: {
    src: `${dirs.src}views/`,
    dest: `${dirs.base}views/`,
    rootFiles: `${dirs.src}views/*.*`,
    folders: `${dirs.src}views/*/*`
  }
}

import { paths } from '../config';

const clean = done => {
  // get all files at root of views directory
  const viewsDirRootFiles = glob.sync(paths.views.rootFiles);

  // replace views dir in base of filepaths with root
  const rootFiles = viewsDirRootFiles.map(f => f.replace(paths.views.src, paths.dirs.base));

  // combine root view files with other folders/files to delete to generate final deletion-target array
  const filesToDelete = [
    ...rootFiles,
    './views',
  ];

  del.sync(filesToDelete);
  done();
}
...