count_image_files.mjs 1.6 KB

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