Hello I am seeking a simple solution to running a list of "chown -R" <mydir>" commands in 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.
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.
serfacls is a command that lets you make user (or other) level permissions changes outside of the usual ownership semantics.
So you could for example do something like setfacl -d -R u:<your username>:rwx /the/very/top/directory/
That should make it so that newly created files and folders have a default acl allowing you access. Run it again with the m flag to modify existing files.
It'll take a minute to loop through everything, but you should only have to run it once so it's not a recurring issue.
if it's bash, add & at the end of the chown lines (no ;). then put "wait" on a single line where it should wait for all to finish.
if you don't add "wait", the chowns could be kilked when the script finishes. to prevent that you have to redirect their error and standard output somewhere that exists even after the script finished (/dev/null or a logfile) and call "disown %+" to detach the processes from the parent.