"If you want to make sure the files are set to 644 and there are files in the path which have the execute flag, you will have to remove the execute flag first. +X doesn't remove the execute flag from files who already have it.
Example:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Update: this appears to fail because the first change (ugo-x) makes the directory unexecutable, so all the files underneath it are not changed."
"Try this python script; it requires no spawning of processes and does only two syscalls per file. Apart from an implementation in C, it will probably be the fastest way of doing it (I needed it to fix a filesystem of 15 million files which were all set to 777)
#!/usr/bin/python3 import os for par, dirs, files in os.walk('.'): for d in dirs: os.chmod(par + '/' + d, 0o755) for f in files: os.chmod(par + '/' + f, 0o644)
In my case, a try/catch was required around the last chmod, since chmodding some special files failed." "Try this python script; it requires no spawning of processes and does only two syscalls per file. Apart from an implementation in C, it will probably be the fastest way of doing it (I needed it to fix a filesystem of 15 million files which were all set to 777)
#!/usr/bin/python3 import os for par, dirs, files in os.walk('.'): for d in dirs: os.chmod(par + '/' + d, 0o755) for f in files: os.chmod(par + '/' + f, 0o644)
In my case, a try/catch was required around the last chmod, since chmodding some special files failed."
mode of 'chmodtests/' retained as 0755 (rwxr-xr-x) mode of 'chmodtests/aa' retained as 0755 (rwxr-xr-x) mode of 'chmodtests/aa/a1' retained as 0755 (rwxr-xr-x) mode of 'chmodtests/aa/a1/read_only' changed from 0444 (r--r--r--) to 0644 (rw-r--r--) mode of 'chmodtests/aa/a1/read_w' changed from 0666 (rw-rw-rw-) to 0644 (rw-r--r--) mode of 'chmodtests/aa/a1/read_wx' changed from 0777 (rwxrwxrwx) to 0644 (rw-r--r--) mode of 'chmodtests/aa/read_only' changed from 0400 (r--------) to 0644 (rw-r--r--) mode of 'chmodtests/aa/a2' retained as 0755 (rwxr-xr-x) mode of 'chmodtests/aa/read_w' changed from 0600 (rw-------) to 0644 (rw-r--r--) mode of 'chmodtests/aa/read_wx' changed from 0700 (rwx------) to 0644 (rw-r--r--) mode of 'chmodtests/bb' retained as 0755 (rwxr-xr-x)