count_image_files.mjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {
  2. db,
  3. waitForDb,
  4. READ_PREFERENCE_SECONDARY,
  5. } from '../app/src/infrastructure/mongodb.js'
  6. import { extname } from 'node:path'
  7. const FILE_TYPES = [
  8. '.jpg',
  9. '.jpeg',
  10. '.png',
  11. '.bmp',
  12. '.webp',
  13. '.svg',
  14. '.pdf',
  15. '.eps',
  16. '.gif',
  17. '.ico',
  18. '.tiff',
  19. ]
  20. const longestFileType = Math.max(...FILE_TYPES.map(fileType => fileType.length))
  21. async function main() {
  22. await waitForDb()
  23. const projects = db.projects.find(
  24. {},
  25. {
  26. projection: { rootFolder: 1 },
  27. readPreference: READ_PREFERENCE_SECONDARY,
  28. }
  29. )
  30. let projectsProcessed = 0
  31. const result = new Map(FILE_TYPES.map(fileType => [fileType, 0]))
  32. for await (const project of projects) {
  33. projectsProcessed += 1
  34. if (projectsProcessed % 100000 === 0) {
  35. console.log(projectsProcessed, 'projects processed')
  36. }
  37. countFiles(project.rootFolder[0], result)
  38. }
  39. const sortedResults = [...result.entries()].sort(
  40. ([, countA], [, countB]) => countB - countA
  41. )
  42. sortedResults.forEach(([fileType, count]) => {
  43. console.log(
  44. `${fileType.padStart(longestFileType, ' ')}: ${count
  45. .toString()
  46. .padStart(7, ' ')}`
  47. )
  48. })
  49. }
  50. function countFiles(folder, result) {
  51. if (folder.folders) {
  52. for (const subfolder of folder.folders) {
  53. countFiles(subfolder, result)
  54. }
  55. }
  56. if (folder.fileRefs) {
  57. for (const file of folder.fileRefs) {
  58. const fileType = extname(file.name).toLowerCase()
  59. const current = result.get(fileType)
  60. if (current !== undefined) {
  61. result.set(fileType, current + 1)
  62. }
  63. }
  64. }
  65. return result
  66. }
  67. try {
  68. await main()
  69. process.exit(0)
  70. } catch (error) {
  71. console.error(error)
  72. process.exit(1)
  73. }