Add batch and PowerShell scripts to find untracked binary files not in Git LFS

This commit is contained in:
2026-03-17 15:25:48 -06:00
parent 60100fbab2
commit dc97400d1e
3 changed files with 820 additions and 9 deletions
@@ -2544,22 +2544,307 @@ Now let me verify the changes by checking LFS status again:
--- ---
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2"> <tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
<details><summary>Tool use: **run_terminal_command_v2** • Run command: git lfs status 2>&1 | Select-String "\(Git:" | Select-String -Pattern "\.(npy|pkl|ttf|lzma|xz|z|gzip|3dxProfile)" | Measure-Object</summary> <details><summary>Tool use: **run_terminal_command_v2** • Run command: powershell -ExecutionPolicy Bypass -File ".\find-untracked-binaries.ps1"</summary>
```bash ```bash
git lfs status 2>&1 | Select-String "\(Git:" | Select-String -Pattern "\.(npy|pkl|ttf|lzma|xz|z|gzip|3dxProfile)" | Measure-Object powershell -ExecutionPolicy Bypass -File ".\find-untracked-binaries.ps1"
``` ```
``` ```
Scanning repository for untracked binaries: C:\Users\Nathan\Desktop\blender-portable-repo
Count : 63 Getting files tracked by Git (not LFS)...
Average : Total files to check: 10788
Sum :
Maximum :
Minimum :
StandardDeviation :
Property :
Found 3235 binary files tracked by Git (not LFS):
.dat (1114 files):
- extensions/.cache/compat.dat (758 B)
- extensions/.local/lib/python3.11/site-packages/babel/global.dat (448.55 KB)
- extensions/.local/lib/python3.11/site-packages/babel/locale-data/aa.dat (2.73 KB)
- extensions/.local/lib/python3.11/site-packages/babel/locale-data/aa_DJ.dat (1.09 KB)
- extensions/.local/lib/python3.11/site-packages/babel/locale-data/aa_ER.dat (637 B)
... and 1109 more
.gz (908 files):
- extensions/.local/lib/python3.11/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz (152.73 KB)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_compressed_pickle_py27_np16.gz (769 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_compressed_pickle_py27_np17.gz (757 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_compressed_pickle_py33_np18.gz (792 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_compressed_pickle_py34_np19.gz (794 B)
... and 903 more
.png (893 files):
- extensions/.local/lib/python3.11/site-packages/networkx/drawing/tests/baseline/test_house_with_colors.png (21.40 KB)
- extensions/blender_org/brushstroke_tools/icons/random.png (1.88 KB)
- extensions/blender_org/incremental_auto_save/docs/incremental_autosave.png (58.03 KB)
- extensions/blender_org/iocgpoly_lip_sync/Assets/Images/spritesheet_visemes.png (167.66 KB)
- extensions/blender_org/uv_toolkit/checker_maps/1024x1024_a.png (190.08 KB)
... and 888 more
.blend (73 files):
- config/startup.blend (1.08 MB)
- config/userpref.blend (244.97 KB)
- extensions/blender_org/bool_tool/assets.blend (108.92 KB)
- extensions/blender_org/brushstroke_tools/assets/core/brushstroke_tools-resources.blend (952.33 KB)
- extensions/blender_org/brushstroke_tools/assets/styles/brushstroke_tools-oil_brushes.blend (256.52 KB)
... and 68 more
.whl (47 files):
- extensions/blender_org/datablock_utils/wheels/networkx-3.4.2-py3-none-any.whl (1.64 MB)
- extensions/blender_org/iocgpoly_lip_sync/wheels/attrs-25.3.0-py3-none-any.whl (62.32 KB)
- extensions/blender_org/iocgpoly_lip_sync/wheels/babel-2.17.0-py3-none-any.whl (9.71 MB)
- extensions/blender_org/iocgpoly_lip_sync/wheels/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl (177.99 KB)
- extensions/blender_org/iocgpoly_lip_sync/wheels/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl (174.46 KB)
... and 42 more
.jpg (45 files):
- extensions/user_default/blenderkit/bl_ext.user_default.blenderkit_updater/backup/thumbnails/intro.jpg (65.21 KB)
- extensions/user_default/blenderkit/bl_ext.user_default.blenderkit_updater/backup/thumbnails/thumbnail_not_available.jpg (8.79 KB)
- extensions/user_default/blenderkit/bl_ext.user_default.blenderkit_updater/backup/thumbnails/thumbnail_notready.jpg (2.93 KB)
- extensions/user_default/blenderkit/thumbnails/intro.jpg (65.21 KB)
- extensions/user_default/blenderkit/thumbnails/thumbnail_not_available.jpg (8.79 KB)
... and 40 more
.exr (23 files):
- extensions/blender_org/brushstroke_tools/assets/core/maps/canvas-linen_01.exr (939.29 KB)
- extensions/blender_org/brushstroke_tools/assets/styles/maps/oil_paint-dry_loaded.exr (4.63 MB)
- extensions/blender_org/brushstroke_tools/assets/styles/maps/oil_paint-dry_scrumble.exr (6.44 MB)
- extensions/blender_org/brushstroke_tools/assets/styles/maps/oil_paint-fat_loaded.exr (4.75 MB)
- extensions/blender_org/brushstroke_tools/assets/styles/maps/oil_paint-feathery.exr (4.65 MB)
... and 18 more
.npy (20 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_01.npy (120 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_02.npy (120 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_03.npy (236 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.2_pickle_py27_np16.pkl_04.npy (104 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.2_pickle_py27_np17.pkl_01.npy (120 B)
... and 15 more
.dll (18 files):
- extensions/.local/lib/python3.11/site-packages/vosk/libgcc_s_seh-1.dll (1.21 MB)
- extensions/.local/lib/python3.11/site-packages/vosk/libstdc++-6.dll (18.54 MB)
- extensions/.local/lib/python3.11/site-packages/vosk/libvosk.dll (24.79 MB)
- extensions/.local/lib/python3.11/site-packages/vosk/libwinpthread-1.dll (578.23 KB)
- extensions/.user/blender_org/iocgpoly_lip_sync/bin/windows/libespeak-ng.dll (468.50 KB)
... and 13 more
.pkl (10 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl (986 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl (1.04 KB)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl (1.04 KB)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl (1.04 KB)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl (1.04 KB)
... and 5 more
.ttf (9 files):
- extensions/user_default/retopoflow/addon_common/common/fonts/DejaVuSansMono.ttf (332.73 KB)
- extensions/user_default/retopoflow/addon_common/common/fonts/DroidSans-Blender.ttf (5.08 MB)
- extensions/user_default/retopoflow/addon_common/common/fonts/DroidSerif-Bold.ttf (180.89 KB)
- extensions/user_default/retopoflow/addon_common/common/fonts/DroidSerif-BoldItalic.ttf (185.84 KB)
- extensions/user_default/retopoflow/addon_common/common/fonts/DroidSerif-Italic.ttf (173.40 KB)
... and 4 more
.exe (9 files):
- extensions/user_default/blenderkit/bl_ext.user_default.blenderkit_updater/backup/client/v1.7.0/blenderkit-client-windows-arm64.exe (9.85 MB)
- extensions/user_default/blenderkit/bl_ext.user_default.blenderkit_updater/backup/client/v1.7.0/blenderkit-client-windows-x86_64.exe (10.67 MB)
- extensions/user_default/blenderkit/client/v1.7.0/blenderkit-client-windows-arm64.exe (9.85 MB)
- extensions/user_default/blenderkit/client/v1.7.0/blenderkit-client-windows-x86_64.exe (10.67 MB)
- scripts/addons/Rokoko Libraries/python311/bin/gql-cli.exe (105.89 KB)
... and 4 more
.bz2 (9 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.bz2 (997 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.bz2 (1000 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.bz2 (1021 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.bz2 (1005 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.bz2 (991 B)
... and 4 more
.zip (8 files):
- extensions/blender_org/iocgpoly_lip_sync/Assets/Archives/common/espeak-ng-data.zip (11.77 MB)
- extensions/blender_org/iocgpoly_lip_sync/Assets/Archives/darwin/espeak-ng-darwin.zip (379.98 KB)
- extensions/blender_org/iocgpoly_lip_sync/Assets/Archives/linux/espeak-ng-linux.zip (1.87 MB)
- extensions/blender_org/iocgpoly_lip_sync/Assets/Archives/windows/espeak-ng-windows.zip (211.38 KB)
- extensions/user_default/flip_fluids_addon/source/flip_fluids_addon_source.zip (12.48 MB)
... and 3 more
.hdr (8 files):
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/cc_blender_tools-2_3_3_updater/source/presets/kiara_1_dawn_4k.hdr (24.24 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/cc_blender_tools-2_3_3_updater/source/presets/veranda_4k.hdr (25.41 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/presets/kiara_1_dawn_4k.hdr (24.24 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/presets/veranda_4k.hdr (25.41 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/source/presets/kiara_1_dawn_4k.hdr (24.24 MB)
... and 3 more
.3dxProfile (8 files):
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/cc_blender_tools-2_3_3_updater/source/hik/RLRigify.3dxProfile (7.99 KB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/cc_blender_tools-2_3_3_updater/source/hik/vroid.3dxProfile (5.06 KB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/hik/RLRigify.3dxProfile (7.99 KB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/hik/vroid.3dxProfile (5.06 KB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/source/hik/RLRigify.3dxProfile (7.99 KB)
... and 3 more
.dylib (6 files):
- extensions/user_default/flip_fluids_addon/ffengine/lib/libAlembic.1.8.dylib (11.65 MB)
- extensions/user_default/flip_fluids_addon/ffengine/lib/libAlembic.dylib (11.65 MB)
- extensions/user_default/flip_fluids_addon/ffengine/lib/libImath-3_1.29.dylib (715.09 KB)
- extensions/user_default/flip_fluids_addon/ffengine/lib/libImath-3_1.dylib (715.09 KB)
- extensions/user_default/flip_fluids_addon/ffengine/lib/libffalembicengine.dylib (5.05 MB)
... and 1 more
.gzip (5 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.gzip (798 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.gzip (831 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.gzip (831 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.gzip (833 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.gzip (800 B)
.lzma (5 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.lzma (660 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.lzma (694 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.lzma (697 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.lzma (701 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.lzma (715 B)
.xz (5 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py27_np17.pkl.xz (712 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py33_np18.pkl.xz (752 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py34_np19.pkl.xz (752 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.10.0_pickle_py35_np19.pkl.xz (752 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.11.0_pickle_py36_np111.pkl.xz (752 B)
.TGA (4 files):
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/cc_blender_tools-2_3_3_updater/source/textures/RL_CC3_Plus_EyeTearlineNormal.TGA (3.00 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/backup/textures/RL_CC3_Plus_EyeTearlineNormal.TGA (3.00 MB)
- scripts/addons/cc_blender_tools-2_3_3/cc_blender_tools-2_3_3_updater/source/textures/RL_CC3_Plus_EyeTearlineNormal.TGA (3.00 MB)
- scripts/addons/cc_blender_tools-2_3_3/textures/RL_CC3_Plus_EyeTearlineNormal.TGA (3.00 MB)
.z (3 files):
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_01.npy.z (43 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_02.npy.z (43 B)
- extensions/.local/lib/python3.11/site-packages/joblib/test/data/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz_03.npy.z (37 B)
.so (2 files):
- extensions/user_default/flip_fluids_addon/ffengine/lib/libffalembicengine.so (3.51 MB)
- extensions/user_default/flip_fluids_addon/ffengine/lib/libffengine.so (3.21 MB)
.lnk (1 files):
- scripts/presets/keyconfig - Shortcut.lnk (1.41 KB)
.ogg (1 files):
- extensions/user_default/flip_fluids_addon/resources/sounds/alarm/alarm.ogg (32.51 KB)
.mp4 (1 files):
- scripts/addons/blender_kitsu/res/metastrip.mp4 (26.61 KB)
========================================
SUGGESTED .gitattributes ADDITIONS:
========================================
*.dat filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.npy filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
*.pkl filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.hdr filter=lfs diff=lfs merge=lfs -text
*.3dxProfile filter=lfs diff=lfs merge=lfs -text
*.dylib filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.gzip filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.TGA filter=lfs diff=lfs merge=lfs -text
*.z filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.lnk filter=lfs diff=lfs merge=lfs -text
To fix these files, add the above lines to your .gitattributes file,
then run: git add --renormalize .
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
Exception calling "GetExtension" with "1" argument(s): "Illegal characters in path."
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:118 char:5
+ $extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException
``` ```
</details> </details>
@@ -3766,3 +4051,311 @@ This is why icons and logos in modern web/apps are often SVG - they're crisp at
--- ---
_**User**_
can you write a script that looks for binaries that aren't tracked by LFS?
---
_**Agent (model kimi-k2.5, mode Agent)**_
<think><details><summary>Thought Process</summary>
The user wants a script to find binaries that aren't tracked by LFS. This is useful for identifying files that should be in LFS but are currently in regular Git tracking.
I should create a PowerShell script that:
1. Scans the repository for files tracked by Git (not LFS)
2. Identifies which ones are likely binary files based on extension
3. Reports them so the user can update .gitattributes
I'll create a comprehensive script that checks file extensions and optionally checks file content (using git's binary detection or file command pattern).</details></think>
---
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
<details><summary>Tool use: **edit_file_v2** • Edit file: C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1</summary>
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
I created a PowerShell script. Now let me also create a simple batch wrapper for easy double-click execution.</details></think>
---
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
<details><summary>Tool use: **edit_file_v2** • Edit file: C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.bat</summary>
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
Good, I created both files. Now let me run the script to test it and show the user what it found.</details></think>
---
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
<details><summary>Tool use: **run_terminal_command_v2** • Run command: powershell -ExecutionPolicy Bypass -File ".\find-untracked-binaries.ps1"</summary>
```bash
powershell -ExecutionPolicy Bypass -File ".\find-untracked-binaries.ps1"
```
```
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:60 char:18
+ '.*\.(\d+)$', # Files ending in numbers (often backup/cache)
+ ~
Missing expression after ','.
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:158 char:56
+ Write-Host " .$($group.Name) ($($group.Count) files):" -Fore ...
+ ~~~~~
Unexpected token 'files' in expression or statement.
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:158 char:55
+ Write-Host " .$($group.Name) ($($group.Count) files):" -Fore ...
+ ~
Missing closing ')' in expression.
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:147 char:37
+ if ($untrackedBinaries.Count -eq 0) {
+ ~
Missing closing '}' in statement block or type definition.
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:158 char:61
+ Write-Host " .$($group.Name) ($($group.Count) files):" -Fore ...
+ ~
Unexpected token ')' in expression or statement.
At C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1:191 char:57
+ ... Host "========================================" -ForegroundColor Cyan
+ ~~~~~~~~~~~~~~~~~~~~~~~
The string is missing the terminator: ".
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterToken
```
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
There are syntax errors in the PowerShell script. Let me fix them. The issues are:
1. Line 60: Missing expression after comma in array
2. Line 158: The Write-Host string needs proper escaping
3. Missing closing brace
Let me rewrite the script properly.</details></think>
---
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
<details><summary>Tool use: **edit_file_v2** • Edit file: C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1</summary>
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
Now let me test the script again.The script works! It found 3235 binary files tracked by Git instead of LFS. Most of them are `.dat`, `.gz`, `.png`, `.blend`, `.whl`, etc. This is a lot more than expected.
The script successfully:
1. Scans for binary file extensions
2. Identifies which ones are tracked by Git (not LFS)
3. Groups them by extension
4. Shows file paths and sizes
5. Generates suggested `.gitattributes` entries
Let me fix the error about illegal characters in path by adding error handling. But actually, the script still works despite those errors - it just skips problematic filenames and continues.
Let me add better error handling.</details></think>
---
The script works. It found **3,235 binary files** tracked by Git (not LFS). Let me fix the error handling for those "illegal characters in path" warnings:
---
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
<details><summary>Tool use: **edit_file_v2** • Edit file: C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1</summary>
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
Now let me create a summary of the results. The script found 3,235 binary files tracked by Git instead of LFS. This is significant. Let me present the findings.</details></think>
---
Done. Here's what the script found:
## Summary: 3,235 Binary Files Not in LFS
**Top offenders by file count:**
| Extension | Count | Type |
|-----------|-------|------|
| `.dat` | 1,114 | Data files (Babel locale data, caches) |
| `.gz` | 908 | Gzip archives (joblib test data, zoneinfo) |
| `.png` | 893 | Images (icons, thumbnails, test images) |
| `.blend` | 73 | Blender scenes |
| `.whl` | 47 | Python wheels |
| `.jpg` | 45 | Images |
| `.exr` | 23 | HDR images |
| `.npy` | 20 | NumPy arrays |
| `.dll` | 18 | Windows libraries |
| `.pkl` | 10 | Pickle files |
**Scripts created:**
- `find-untracked-binaries.ps1` - PowerShell script with full options
- `find-untracked-binaries.bat` - Double-clickable version
Run it anytime to check if new binaries are being added to regular Git instead of LFS.
---
_**User**_
I'm pretty sure those are tracked by LFS, seems like false positive to me.
---
_**Agent (model kimi-k2.5, mode Agent)**_
<think><details><summary>Thought Process</summary>
The user is saying that the files detected by the script are actually already tracked by LFS. This could be a false positive in the script - maybe the script is detecting files that are in the working tree but not actually checking if they're tracked by LFS properly.
Let me think about what the script does:
1. It gets files from `git status --porcelain` and `git ls-files`
2. It filters for binary extensions
3. It reports them as "not in LFS"
The issue is that the script is checking ALL tracked files, not just files that are NOT in LFS. The script doesn't actually check if a file is in LFS or not - it just assumes that if it has a binary extension and is tracked by git, it should be reported.
But the files could already be in LFS! The script needs to actually check the LFS status to determine if a file is tracked by LFS or not.
Let me verify by running `git lfs ls-files` or checking specific files to see if they're actually in LFS.</details></think>
---
Let me verify by checking if those files are actually tracked by LFS:
---
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
<details><summary>Tool use: **run_terminal_command_v2** • Run command: git lfs ls-files | Select-String "\.dat$" | Measure-Object</summary>
```bash
git lfs ls-files | Select-String "\.dat$" | Measure-Object
```
```
Count : 1114
Average :
Sum :
Maximum :
Minimum :
StandardDeviation :
Property :
```
</details>
</tool-use>
---
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
<details><summary>Tool use: **run_terminal_command_v2** • Run command: git lfs ls-files | Select-String "\.png$" | Measure-Object</summary>
```bash
git lfs ls-files | Select-String "\.png$" | Measure-Object
```
```
Count : 896
Average :
Sum :
Maximum :
Minimum :
StandardDeviation :
Property :
```
</details>
</tool-use>
---
<tool-use data-tool-type="shell" data-tool-name="run_terminal_command_v2">
<details><summary>Tool use: **run_terminal_command_v2** • Run command: git lfs ls-files | Select-String "\.blend$" | Measure-Object</summary>
```bash
git lfs ls-files | Select-String "\.blend$" | Measure-Object
```
```
Count : 73
Average :
Sum :
Maximum :
Minimum :
StandardDeviation :
Property :
```
</details>
</tool-use>
---
<think><details><summary>Thought Process</summary>
So the files ARE in LFS:
- 1,114 .dat files in LFS
- 896 .png files in LFS
- 73 .blend files in LFS
But the script is showing 1,114 .dat files, 893 .png files, and 73 .blend files as "not in LFS". The counts are very similar which confirms they're already tracked by LFS.
The issue is the script is checking ALL git-tracked files with binary extensions, not filtering out LFS-tracked files. The script needs to compare against `git lfs ls-files` to see which files are actually NOT in LFS.
Let me update the script to properly filter out LFS-tracked files.</details></think>
---
You're right! The files ARE tracked by LFS:
- `.dat`: 1,114 files in LFS (script reported 1,114)
- `.png`: 896 files in LFS (script reported 893)
- `.blend`: 73 files in LFS (script reported 73)
The script has a bug - it's reporting ALL git-tracked binary files, not filtering out the ones already in LFS. Let me fix it:
---
<tool-use data-tool-type="write" data-tool-name="edit_file_v2">
<details><summary>Tool use: **edit_file_v2** • Edit file: C:\Users\Nathan\Desktop\blender-portable-repo\find-untracked-binaries.ps1</summary>
Status: **loading**
</details>
</tool-use>
---
+25
View File
@@ -0,0 +1,25 @@
@echo off
:: Batch wrapper to find binary files not tracked by Git LFS
echo ========================================
echo Find Untracked Binaries (Not in LFS)
echo ========================================
echo.
:: Check if running from the correct directory
if not exist ".git" (
echo ERROR: No .git directory found in current folder.
echo Please run this script from your repository root.
pause
exit /b 1
)
echo This will scan your repository for binary files that are
echo tracked by Git instead of Git LFS.
echo.
:: Run the PowerShell script
powershell -ExecutionPolicy Bypass -File "%~dp0find-untracked-binaries.ps1" %*
echo.
pause
+193
View File
@@ -0,0 +1,193 @@
# PowerShell script to find binary files NOT tracked by Git LFS
# Run this from your repository root
param(
[string]$RepoPath = ".",
[switch]$ShowLFSStatus = $false
)
$ErrorActionPreference = "Continue"
# Common binary file extensions that should be in LFS
$binaryExtensions = @(
# Images
'bmp', 'exr', 'gif', 'hdr', 'jpg', 'jpeg', 'png', 'tga', 'tif', 'tiff', 'webp', 'heic', 'HEIC',
'ico', 'cur', 'ani', 'xcf', 'psd', 'ai', 'af', 'eps', 'raw', 'cr2', 'nef', 'dng',
# 3D/CG
'3ds', 'abc', 'blend', 'blend1', 'blend2', 'bvh', 'c4d', 'dae', 'fbx', 'fbxkey',
'ma', 'max', 'mb', 'obj', 'usd', 'usdz', 'vdb', 'bphys', 'bobj', 'bvel', 'bpointcache', 'blob',
'unitypackage', 'skp', 'stl', 'ply', 'glb', 'gltf', '3mf', 'lwo', 'lws',
# Character Creator / Reallusion
'ccAvatar', 'ccProject', 'ccCloth', 'ccProp', 'ccScene', 'ccHair',
'rlMotion', 'rlPose', 'iAvatar', 'iMotion', 'iProp', 'iMaterial', 'rlHead', 'rlHair', 'rlScene', 'rlSkintex',
'3dxProfile',
# Houdini
'hiplc', 'bgeo', 'bgeo.sc', 'hdanc', 'otllc', 'otlnc',
# Video
'avi', 'mkv', 'mov', 'MOV', 'mp4', 'webm', 'm4v', 'mpg', 'mpeg', 'wmv', 'flv', 'f4v',
# Audio
'mp3', 'wav', 'm4a', 'aac', 'ogg', 'flac', 'wma', 'aiff', 'au', 'ra', 'ram', 'mid', 'midi', 'ac3', 'dts',
# Archives
'7z', 'bz2', 'gz', 'gzip', 'lzma', 'rar', 'tar', 'xz', 'z', 'zip', 'whl', 'npz',
'pkl', 'pickle', 'joblib', 'parquet', 'feather',
# Documents
'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'odt', 'ods', 'odp', 'rtf',
# Adobe
'aegraphic', 'aep', 'prel', 'prin', 'prmf', 'prproj', 'ai', 'psd', 'pk', 'pkf',
# Data/Cache
'h5', 'hdf5', 'dat', 'db', 'sqlite', 'sqlite3', 'mdb', 'ldb', 'frm', 'ibd',
'npy', 'pkl', 'pickle', 'joblib', 'caffemodel', 'pth', 'onnx', 'pb', 'tflite',
# Binaries
'exe', 'dll', 'so', 'dylib', 'pyd', 'bin', 'o', 'a', 'lib', 'obj', 'app',
'msi', 'msp', 'msm', 'dmg', 'pkg', 'deb', 'rpm', 'snap', 'flatpak', 'AppImage',
# Fonts
'ttf', 'otf', 'woff', 'woff2', 'eot', 'pfm', 'afm', 'tfm',
# Other
'uni', 'pdn', 'pur', 'lnk', 'swf', 'fla', 'wasm', 'loom', 'mat', 'fbxkey',
'ffp3', 'data', 'sqlite3', 'db', 'raw', 'dpx', 'drp', 'lut', 'cube', 'spi1d', 'spi3d', 'clf',
# Substance
'sbs', 'sbsar', 'spp', 'sbsprs', 'sbscfg',
# Flip Fluids
'bphys', 'bobj', 'bvel', 'bpointcache', 'blob', 'ffp3',
# Game engines
'uasset', 'umap', 'upk', 'udk', 'pak', 'unitypackage', 'prefab', 'asset', 'meta'
)
function Test-IsBinaryExtension {
param([string]$extension)
return $binaryExtensions -contains $extension
}
function Get-FileSize {
param([string]$path)
try {
$file = Get-Item $path -ErrorAction SilentlyContinue
if ($file) {
if ($file.Length -gt 1MB) {
return "{0:N2} MB" -f ($file.Length / 1MB)
} elseif ($file.Length -gt 1KB) {
return "{0:N2} KB" -f ($file.Length / 1KB)
} else {
return "$($file.Length) B"
}
}
} catch {
return "Unknown"
}
return "Unknown"
}
# Get absolute path
$absPath = Resolve-Path $RepoPath
Write-Host "Scanning repository for untracked binaries: $absPath" -ForegroundColor Cyan
Write-Host ""
# Get list of ALL files tracked by Git
Write-Host "Getting files tracked by Git..." -ForegroundColor Yellow
$allGitFiles = git ls-files 2>$null
# Get list of files tracked by LFS
Write-Host "Getting files tracked by LFS..." -ForegroundColor Yellow
$lfsFiles = git lfs ls-files 2>$null | ForEach-Object {
# Parse the LFS output format: <oid> * <filename> or <oid> - <filename>
if ($_ -match '^[a-f0-9]+\s+[-*]\s+(.+)$') {
$matches[1]
}
}
# Create a hashtable for fast lookup of LFS files
$lfsFileLookup = @{}
foreach ($file in $lfsFiles) {
$lfsFileLookup[$file] = $true
}
Write-Host "Total Git-tracked files: $($allGitFiles.Count)" -ForegroundColor Gray
Write-Host "Total LFS-tracked files: $($lfsFiles.Count)" -ForegroundColor Gray
Write-Host ""
# Find binary files that are NOT in LFS
$untrackedBinaries = @()
$extensionSummary = @{}
foreach ($file in $allGitFiles) {
# Skip if empty
if ([string]::IsNullOrWhiteSpace($file)) { continue }
# Skip if already in LFS
if ($lfsFileLookup.ContainsKey($file)) { continue }
# Get extension (with error handling for weird filenames)
try {
$extension = [System.IO.Path]::GetExtension($file).TrimStart('.')
} catch {
continue # Skip files with problematic names
}
# Check if it's a known binary extension
if (Test-IsBinaryExtension -extension $extension) {
$fullPath = Join-Path $absPath $file
$fileSize = Get-FileSize -path $fullPath
$untrackedBinaries += [PSCustomObject]@{
File = $file
Extension = $extension
Size = $fileSize
}
# Track summary
if (-not $extensionSummary.ContainsKey($extension)) {
$extensionSummary[$extension] = 0
}
$extensionSummary[$extension]++
}
}
# Display results
if ($untrackedBinaries.Count -eq 0) {
Write-Host "No untracked binary files found!" -ForegroundColor Green
Write-Host "All binary files are properly tracked by Git LFS." -ForegroundColor Green
} else {
Write-Host "Found $($untrackedBinaries.Count) binary files tracked by Git (not LFS):" -ForegroundColor Red
Write-Host ""
# Group by extension for display
$groupedByExt = $untrackedBinaries | Group-Object -Property Extension | Sort-Object Count -Descending
foreach ($group in $groupedByExt) {
$groupName = $group.Name
$groupCount = $group.Count
Write-Host " .$groupName ($groupCount files):" -ForegroundColor Yellow
foreach ($item in $group.Group | Select-Object -First 10) {
Write-Host " - $($item.File) ($($item.Size))" -ForegroundColor Gray
}
if ($groupCount -gt 10) {
Write-Host " ... and $($groupCount - 10) more" -ForegroundColor DarkGray
}
}
Write-Host ""
Write-Host "========================================" -ForegroundColor Red
Write-Host "SUGGESTED .gitattributes ADDITIONS:" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
# Generate suggested gitattributes entries
$sortedExts = $extensionSummary.GetEnumerator() | Sort-Object Value -Descending
foreach ($ext in $sortedExts) {
$extName = $ext.Key
Write-Host "*.$extName filter=lfs diff=lfs merge=lfs -text" -ForegroundColor White
}
Write-Host ""
Write-Host "To fix these files, add the above lines to your .gitattributes file," -ForegroundColor Yellow
Write-Host "then run: git add --renormalize ." -ForegroundColor Yellow
}
Write-Host ""
# Optional: Show full LFS status
if ($ShowLFSStatus) {
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Current LFS Status:" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
git lfs status 2>&1 | ForEach-Object { Write-Host $_ }
}