Как удалить два нижних файла (по их имени) из каталога

У меня есть каталог со следующими именами файлов:

01.02.2010.txt
02.02.2010.txt
03.02.2010.txt
04.02.2010.txt

Я прочитал названия файлов без их расширения:

fs.readdir('./files', function (err, items) {
    items.forEach(function (file) {
        console.info(file.slice(0,-5))
    });
});

я хочу удалить два последних файла с наименьшей датой из каталога.

у вас есть идеи, как это сделать с node.js, спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В основном это просто размышления.

У вас формат mm.dd.yyyy.txt.

Теперь мы можем написать быструю функцию для сравнения двух дат:

// Assume f1, f2 are filenames
function compareDates(f1, f2) {
    var d1 = f1.split("."),
        d2 = f2.split(".");

        var temp;
        temp = d1[2];
        d1[2] = d1[1];
        d1[1] = temp;

        temp = d2[2];
        d2[2] = d2[1];
        d2[1] = temp;

    for (var i = 2; i >= 0; i--) {

        if (parseInt(d1[i]) < parseInt(d2[i]))
            return f1;
        else if (parseInt(d1[i]) > parseInt(d2[i]))
            return f2;
    }

    return f1;
}

Эта функция примет на вход два имени файла и выведет имя файла с более ранней датой. Когда у вас есть эта функция, вы можете просто просмотреть свой список следующим образом:

var earliest = [items[0], items[1]];
var index = 0;

if (compareDates(items[0], items[1]) == items[1])
    index++;

items.forEach(function(file) {
    if (compareDates(earliest[index], file) == file) {
        earliest[index] = file;
        if (compareDates(earliest[index], earliest[!index]) == earliest[!index])
            index = !index;
    }
});

На этом этапе массив earliest будет содержать два имени файла с самыми ранними датами. Надеюсь, это помогло!

Обновлено: Как сказал другой, вы можете удалить фактический файл следующим образом:

fs.unlink(filename, function(err) {
    if (err)
        throw err;
    console.info(`${filename} deleted.`);
});
Ответ принят как подходящий

Я генерирую дату для каждого файла в списке переменных files на основе имени файла, который уже содержит дату. Имея даты в переменных dates, я сортирую все даты, потому что список файлов может быть в неправильном порядке. После сортировки дат я извлекаю только первые два элемента в массивах дат и генерирую имена файлов на основе дат и сохраняю имена файлов в переменной filesNames.

var files =["04.02.2010.txt","01.02.2010.txt","03.02.2010.txt", "02.02.2010.txt"];

// Loop through the list of file and generate date corresponding to the name of each file
var dates = []
files.forEach(function(date){
	var matches = date.match(/^(.+)\.txt$/);
	var dateTxt = matches[1].split('.');
	var fileDate = new Date(dateTxt[2], dateTxt[1], dateTxt[0]);
	dates.push(fileDate);
});

// Sort list of dates
dates.sort(function (date1, date2) {
	return date1 - date2
});

// Get the 2 lowest dates
var datesToDeletes = dates.slice(0,2);

// Regenerates filesnames
var filesNames = []
datesToDeletes.forEach(function(d){
	var date = d.getDate()
	// Add 0 before date if the month has only one number 
	date = (String(date).length == 1)? "0" + date : date;
	var month = d.getMonth()
	// Add 0 before month if the month has only one number 
	month = (String(month).length == 1)? "0" + month : month;
	var year = d.getFullYear();
	var dateString = date + '.' + month + '.' + year;
	var fileName = dateString + '.txt';
	filesNames.push(fileName);
})

// Deletes files
filesNames.forEach(function(file){
	var path = "" + file;

    // I put console log just for debugging purpose
	console.info(path)

	// Delete each file
    // Here you can delete the file because you have the name of the file in the path variable
	/*
		fs.unlink(path, (err) => {
				throw err;
		});
	*/
})

Другие вопросы по теме