count_image_files.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const {
  2. db,
  3. waitForDb,
  4. READ_PREFERENCE_SECONDARY,
  5. } = require('../app/src/infrastructure/mongodb')
  6. const { extname } = require('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. main()
  68. .then(() => {
  69. process.exit(0)
  70. })
  71. .catch(err => {
  72. console.error(err)
  73. process.exit(1)
  74. })