import fs from 'node-fs' // list.map(folder => { // getExifCreationDate(filepath) // }) import exifr from 'exifr' import moment from 'moment' const pathFolder = '/home/poule/encrypted/stockage-syncable/photos/a_dispatcher' // Replace with path to source directory /** * obtenir une liste des dossiers uniquement dans le dossier courant * @param path * @returns {*} */ function getDirectories (path) { return fs.readdirSync(path).filter(function (file) { return fs.statSync(path + '/' + file).isDirectory() }) } function convertDateToTimeInFileName (inputDate) { return inputDate.replace(' ', 'T') } function findFormattedDate (inputString) { return inputString.match(/^[0-9]{4}-?[0-9]{2}-?[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/) } function getExifCreationDate (filepath) { console.log('filepath', filepath) exifr.parse(filepath).then(exifData => { if (exifData) { let moments = [] // console.log('exif data : ', exifData) // Do something with your data! if (exifData.DateTimeOriginal) { // console.log('image créée le : DateTimeOriginal : ', exifData.DateTimeOriginal) // Do something with your data! moments.push(exifData.DateTimeOriginal) } if (exifData.ModifyDate) { // console.log('image modifiée le : ModifyDate : ', exifData.ModifyDate) // Do something with your data! moments.push(exifData.ModifyDate) } if (exifData.FileModificationDateTime) { // console.log('image créée le : FileModificationDateTime : ', exifData.FileModificationDateTime) // Do something with your data! moments.push(exifData.FileModificationDateTime) } if (exifData.CreateDate) { // console.log('image créée le : CreateDate : ', exifData.CreateDate) // Do something with your data! moments.push(exifData.CreateDate) } moments = moments.map(d => { let newdate = moment(d) return newdate }) let minDate = moment.min(moments) return minDate } else { console.log('pas de exif data') return null } }).catch(error => console.log('Error: ' + error.message)) } const tagSeparator = ' ' const tagSectionSeparator = '--' let fileSectionsName; function findTagSectionInString (inputString) { let listOfTags = [] // remove extension let extensionFile = inputString.match(/\.\w{3,4}$/i) extensionFile = extensionFile[0] inputString = inputString.replace(extensionFile, '') console.log('extensionFile', extensionFile) if (inputString.includes(tagSectionSeparator)) { console.log('inputString', inputString) if (inputString.length) { let boom = inputString.split(tagSectionSeparator) console.log('boom', boom) if (boom.length) { fileSectionsName = boom.splice(tagSeparator); listOfTags = [... fileSectionsName[1].trim().split(tagSeparator)] console.log('listOfTags', listOfTags) }else{ console.log('no boom', boom) } } } return listOfTags } /** * écrit un nouveau nom de fichier formatté * @param convertedToName * @param originalFileName * @returns {*} */ function mixDateNameWithFileName (convertedToName, originalFileName) { // enlever l'ancien timestamp si il existe // ajouter en début de nom le nouveau timestamp avec un espace et conserver le reste du nom return originalFileName } function renameFile (originalFileName, fileMixedNewName) { fs.rename(originalFileName, fileMixedNewName, function (err) { if (err) console.log('rename ERROR: ' + err) }) } // let list = getDirectories(pathFolder) // console.log('list', list) let originalFileName = '2023-06-23T08.55.05.jpg' let formattedDatePIMBefore = findFormattedDate(originalFileName) console.log('formattedDatePIMBefore', formattedDatePIMBefore) let creationDateFound = getExifCreationDate(pathFolder + '/' + originalFileName) let convertedToName = '' if (creationDateFound) { convertedToName = convertDateToTimeInFileName(creationDateFound) } console.log('convertedToName', convertedToName) let fileMixedNewName = mixDateNameWithFileName(convertedToName, originalFileName) console.log('new name', fileMixedNewName) if (fileMixedNewName !== originalFileName) { console.log('renommage =>', fileMixedNewName) // renameFile(originalFileName, fileMixedNewName) } const patternsFiles = { 'downloaded_pic': '', // FyB8cZnWIAc21rw.jpg 'telegram_pic': '', // -4900281569878475578_1109.jpg 'open_camera': '^IMG_OC', // IMG_OC_20230617_092120_3.jpg 'screenshot': '^Screenshot', // Screenshot 2023-06-15 at 15-26-04 Instance Panoramax OSM-FR.png } // getExifCreationDate('/home/poule/encrypted/stockage-syncable/photos/a_dispatcher/2023-06-23T18.36.47 -- machin bidule.jpg') findTagSectionInString('2023-06-23T18.36.47 -- machin bidule.jpg')