1. const fs = require('fs');
  2. const path = require('path');
  3. const cron = require('node-cron');
  4. // Configuration
  5. const sourceDirectory = './source'; // Directory to backup from
  6. const backupDirectory = './backup'; // Directory to backup to
  7. const maxFileSize = 1024 * 1024 * 10; // 10MB limit per file
  8. const maxFiles = 5; // Limit to 5 files per run
  9. const backupInterval = '0 0 * * *'; // Daily at midnight (Cron expression)
  10. /**
  11. * Backs up text files from a source directory to a backup directory.
  12. */
  13. async function backupFiles() {
  14. try {
  15. const files = fs.readdirSync(sourceDirectory);
  16. let backedUpCount = 0;
  17. for (const file of files) {
  18. const filePath = path.join(sourceDirectory, file);
  19. const stat = fs.statSync(filePath);
  20. if (stat.isFile() && file.endsWith('.txt')) {
  21. if (stat.size > maxFileSize) {
  22. console.log(`Skipping ${file} - exceeds size limit (${maxFileSize} bytes).`);
  23. continue;
  24. }
  25. try {
  26. const fileContent = fs.readFileSync(filePath, 'utf8');
  27. const backupFilePath = path.join(backupDirectory, file);
  28. fs.writeFileSync(backupFilePath, fileContent, 'utf8');
  29. backedUpCount++;
  30. console.log(`Backed up ${file} to ${backupFilePath}`);
  31. } catch (err) {
  32. console.error(`Error backing up ${file}: ${err}`);
  33. }
  34. }
  35. }
  36. console.log(`Backup completed. ${backedUpCount} files backed up.`);
  37. } catch (err) {
  38. console.error(`Error during backup process: ${err}`);
  39. }
  40. }
  41. /**
  42. * Schedules the backup task using cron.
  43. */
  44. function scheduleBackup() {
  45. cron.schedule(backupInterval, () => {
  46. console.log('Running scheduled backup...');
  47. backupFiles();
  48. });
  49. }
  50. // Run the scheduler
  51. scheduleBackup();

Add your comment