Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignore symlinks when calculating directory sizes #5

Open
rashil2000 opened this issue Nov 19, 2020 · 8 comments
Open

Ignore symlinks when calculating directory sizes #5

rashil2000 opened this issue Nov 19, 2020 · 8 comments

Comments

@rashil2000
Copy link

I noticed it's showing ~2x the size of a particular folder when compared to the Explorer's Properties dialog. Upon inspecting, I found out that the folder contained symlinks to some other folders.

The --show-directory-sizes flag should ideally ignore symlinked (soft linked) folders and should not recurse into them to add their size to the output.

@rashil2000
Copy link
Author

I think this seems to be a common problem with PS modules, as I had opened the same issue in this repository too about a month ago - gngrninja/PSFolderSize#20

@gardebring
Copy link
Owner

If you have time I welcome a contribution to fix this. Otherwise I will look into it when I have the time :)

@rashil2000
Copy link
Author

Upon some rudimentary research, I found that this line https://github.com/gardebring/PowerColorLS/blob/main/src/Private/FileAndFolderFunctions.ps1#L112 would require some object filtering in between the pipes; excluding directories that have the ReparsePoint attribute (source - https://stackoverflow.com/questions/817794/find-out-whether-a-file-is-a-symbolic-link-in-powershell).

Is this correct? Note that this might require additional checks for figuring out junctions/hardlinks too.

I have my uni exams, I'll definitely try to send a PR once they're done.

@gardebring
Copy link
Owner

Hi again @rashil2000
You are definitely at the right point in the code.
I did however try to create a symlink setup that should create recursion but it seems the powershell code in fact did not do this.

@rashil2000
Copy link
Author

Yes, it seems like when we specify the ReparsePoint attribute, it just excludes those folders from listing but still recurses into them.

PowerShell 6+ doesn't follow symlinks by default, but provides a FollowSymlink flag in case we want to recurse into them.

However, for 5.1, we'll need to create a custom Get-ChildItem function, the one specified in this brilliant answer - https://stackoverflow.com/a/55544084

I tried using this and gives correct results for now. I'll do some more testing and send a PR :)

@eabase
Copy link

eabase commented Feb 6, 2022

@rashil2000
any pr on the horizon?

@rashil2000
Copy link
Author

Not yet. Reason being, I rely on other CLI utilities for disk usage now (for example, gdu in Go or dua in Rust) as PowerShell is just too slow for this work.

However, it has been partly fixed in the issue I linked above, see gngrninja/PSFolderSize@adf71c7.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants