0 votes

Comment supprimer les dossiers node_modules dans les projets auxquels je n'ai pas touché récemment ?

Je souhaite rechercher des dossiers (appelons chacun d'eux $folder ) contenant le dossier node_modules/.

node_modules sont des endroits où l'on installe des bibliothèques javascript, et ces bibliothèques elles-mêmes ont souvent des dossiers avec node_modules, il est donc préférable de toujours exclure node_modules et ses enfants de la recherche ci-dessus. Ils peuvent également être exclus de la recherche ci-dessous :

Pour chaque $folder Les fichiers les plus récemment modifiés sont recherchés par les utilisateurs. Si cette date remonte à plus de quatre semaines, par exemple, j'aimerais supprimer les fichiers suivants $folder/node_modules .

J'imagine que je peux ajouter cela à cron... mais je ne suis pas sûr qu'apple fournisse un moyen plus agréable de faire cela que via bash ou node ou autre...

0voto

roberto tomás Points 101

J'aurais dû faire preuve d'un peu de patience au lieu de poser la question ici d'abord. Je pense avoir trouvé une solution.

~/bin/clean_old_projects.js

const { readdirSync, statSync, rmSync } = require('node:fs')
const {execSync} = require('node:child_process')

const getDirectories = source => {  
  try {
    return readdirSync(source, { withFileTypes: true })
      .filter(dirent => dirent.isDirectory())
      .map(dirent => `${source}/${dirent.name}`)
  }
  catch (e) { return [] }
}

targets = [process.env.HOME]
nodeProjects = []
for (let target of targets) {
  if (/node_modules$/.test(target)) {
    nodeProjects.push(target.replace('/node_modules', ''))
  } else {
    targets.push(...getDirectories(target))
  }
}

const sh = fh => `find "${fh}" -name node_modules -prune -o -type f -print0 | xargs -0 stat -f "%m %N" | sort -rn | head -1 | cut -f2- -d" "`

const fourWeeks = 2419200
const now = new Date()
for (let target of nodeProjects) {
  const fh = execSync(sh(target)).toString().trim()
  if(now - statSync(fh.length? fh: target).mtime > fourWeeks)
    rmSync(target + '/node_modules',  { recursive: true, force: true })
}

puis crontab -e et sauvegarder :

0 3 14,28 * * /usr/local/bin/node /Users/MY_HOME_DIRECTORY/bin/clean_old_projects.js

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X