chmod recursion -- files only
Is there a way to change the permissions on all the files below a given directory? I thought it was as simple as:
chmod -R 444 /usr/lib/whatever/*.ext but this is changing the permissions on everything below the given driectory, including and directories. TIA |
"find . -type f -print | xargs chmod 444 "shoud work, isn't it ?
If not, find . -print >myfile.sh and vi myfile.sh removing the directories (they should not be soo many), and then 1,$s/^/chmod 444/ and sh myfile.sh. I know, the vi way is not very clever, but it works without thinking more than two seconds, so why not ? |
good call. Thanks for the help!
|
You're welcome
|
The first find should work w/o vi.
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 {} \; |
If your files contain spaces, backslashes, etc., do this instead:
find . -type f -print0 | xargs -0 chmod 444 |
also, if you need to change the permissions on the folder instead of the files, try this
Code:
find . -type d -print0 | xargs -0 chmod 755 |
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 '{}' \; |
Using xargs is usually much quicker as it does not have to execute chmod for every file.
|
I'm not sure if it's available everywhere, but on some versions of find at least you can replace the final semicolon with a plus sign, in which case it will act in a way similar to xargs. That is, it will run only one or a few instances of the command, with all the files from find built into a single argument.
Code:
find /usr/lib/whatever -type f -name '*.ext' -exec chmod 444 '{}' \+ (What the heck? I just noticed that this thread is over 6 years old!) |
Great tip David, learn something new every day. I just tried it on AIX 5.3 and it works, it does not work on AIX 5.1
|
Thank you.
|
Recursive chmod thread
So I went trawling the web for an elegant and simple solution to this and decided to write a little script for this myself.
It basically does the recursive chmod but also provides a bit of flexibility for command line options (sets directory and/or file permissions, or exclude both it automatically resets everything to 755-644). It also checks for a few error scenarios. Check it out: http://bigfloppydonkeydisk.blogspot....-files-or.html Hope it helps! |
missing the boat
yah...ok...lets shoot self in foot here....UH people... Dont let my 15 year old AS degree bite you in the ass here! LEAST PERMISSIVE.
THIS IS LINUX for GODS SAKES! You REALLY want the UNIVERSE to READ, or WORSE your FILES? The fact that some server services REQUIRE ANYTHING other than 0 for the world bit is MIND BLOWING! If the service(is and should be) a part of the GROUP you are assigned to(in any way) then SHURELY the process already HAS the necessary permission to read or exec the files, IE: apache. Yet apache wants at minimal read permissions here? I think something is askew somewhere in someone's logic. Your theory holds. Your implementation of it SUCKS! 640 for files, 750 for folders(must exec or cannot browse them) is the CORRECT permissions. Obviously, with apache, the last bit must be 4 for some reason, even though you are USUALLY a part of the www group when setting it up.And Im also finding that one must own files as root to put them into www folder to begin with.They should only need www as a group set.Neither the world bit nor the files should be owned by root to get apache to work with them.THIS IS NOT the CASE, however. Completely missed the boat.Next cruise sails in 30 minutes... need to edit certain files only? (commmand hell....) try this: find . -name "*php" -exec chmod 644 '{}' \; -print |
Quote:
Did they teach swimming in that degree program? The last boat sailed from here long ago! |
All times are GMT -5. The time now is 09:50 AM. |