Question on chown in parallel

https://sh.itjust.works/post/19208347

Question on chown in parallel - sh.itjust.works

Hello I am seeking a simple solution to running a list of “chown -R” <mydir>" commands in script.sh [http://script.sh] It takes a long time to sequentially execute all of these chown commands recursively because the directories have so many files. I want to be able to tackle the root level directories in parallel to speed things up. I imagine there must be a simple way to do this while keeping the list of commands in a single file. xargs and some of the other things I saw online looked like bad fits or would be over engineering this problem.

find <directory> -type f -print0 | xargs -0 -P 4 -n 500 chown

That should find every file in your directory recursively, pass it to xargs, which will then spawn up to four processes which will each call chown on up to 500 files, and it’ll make additional processes as they finish.

In general though, if you regularly need to chown that many files, it’s better to find a way to make sure they have the right ownership from the start.

Thanks for adding that tidbit at the end. The reason that permissions get out alignment is due to different non-privledged accounts (for saftey) will write or copy files somewhat regularly from outside of the main system. I am the furthest thing from a linux expert so maybe you would have a recommendation or better insight after explaining that? This necessitates changing the owner and permissions regularly, especially when I need to interact with the files adhoc and have to wait for my script to run and complete.
If you have multiple users writing to a directory, you should be relying on groups, permissions, and sgid and not care who the owner is.
But what if user A in a new group creates dir “abc” - will dir “abc” automatically be set to the correct group? I would think the group permission would be just like the user permission, not set until manually set.

Yeah since I learned on Windows servers for 20 years, I’m struggling on permissions and groups in Linux in general.

In Windows it’s as easy as enabling ‘children inherit parent’ and then the users can go and create whatever and if they can write, they’ll write it with inherited from the parent permissions. If you change a folder deeper, you can unlink inheritance from the parent and then it could also optionally be the new parent for all children permissions.

I tried a couple of times to do this in Linux and I’ve always struggled due to my own lack of knowledge and understanding. I feel reading it I keep coming to the wrong conclusion too perhaps based on my experience and bias in reading it.

Anyway I know it’s not helpful but I feel the struggle.

Thanks for chiming in, im glad its not just me. I feel like i have a much stronger understanding on things more complicated tham groups! That makes it feel worse