Для выполнения задачи по копированию всех файлов и папок, кроме папки `tmp`, и перемещения их в папку `tmp`, вы можете использовать модуль `fs` из Node.js и реализовать фильтрацию с помощью регулярного выражения. Однако, правильный способ избежать ошибок рекурсии заключается в использовании специальных опций и более аккуратной фильтрации.
Вот пример кода, который выполняет вашу задачу:
```javascript
const fs = require('fs');
const path = require('path');
const sourceDir = '../'; // Путь к исходной директории
const targetDir = path.join(sourceDir, 'tmp'); // Папка назначения
// Функция для копирования содержимого с фильтрацией
function copyFiles(src, dest) {
fs.cpSync(src, dest, {
recursive: true,
filter: (srcPath) => {
// Проверяем, не является ли путь папкой tmp
return !srcPath.includes('/tmp');
},
});
}
// Убедимся, что папка назначения существует
if (!fs.existsSync(targetDir)){
fs.mkdirSync(targetDir);
}
// Копируем все содержимое, за исключением папки tmp
copyFiles(sourceDir, targetDir);
```
### Объяснение:
1. **Импорт библиотек**: Мы используем `fs` для работы с файловой системой и `path` для обработки путей.
2. **Определение директорий**: Указываем путь к исходной директории и к целевой директории `tmp`.
3. **Функция `copyFiles`**: Эта функция копирует файлы и папки из `src` в `dest`, исключая папку `tmp`. Используется опция `filter`, чтобы отфильтровать пути.
4. **Проверка на существование папки назначения**: Мы проверяем, чтобы папка `tmp` существовала, если нет — создаем ее.
5. **Копирование файлов**: Вызов функции `copyFiles` выполняет основную задачу.
Таким образом, вы сможете скопировать содержимое без папки `tmp` в само `tmp`, избегая ошибок рекурсии.