Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I need to strip the executable flag from all files within a certain directory and sub directories. Right now I'm doing it with a 2 step process

find /dir/ -type f -exec chmod ugo-x {} \;
find /dir/ -type d -exec chmod ugo+rx {} \;

Is it possible to modify the first line so that I can strip exec flag from all non-directory files? Since this needs to be done on a fairly regular basis across a lot of directories and files, I'd prefer not to use a bash script which would slow it down.

share|improve this question
    
Out of curiosity, what exactly doesn't your current command do properly? The -type f predicate already selects all files (or equivalently, all non-directory files, since anything that is a file cannot also be a directory). –  David Z Sep 26 '10 at 8:56
    
@David: Sockets, FIFOs, symlinks, devices, etc. –  Ignacio Vazquez-Abrams Sep 26 '10 at 9:09
    
@Ignacio: Yes, but the question was about files, not all those other non-file things. –  David Z Sep 26 '10 at 9:26
    
@David: This is *nix. Everything is a file. –  Ignacio Vazquez-Abrams Sep 26 '10 at 9:29
    
@Ignacio: Everything has a filesystem path, sure, but you can't always say that everything is actually a file. Some people do, but others use "file" in the sense of a regular file, i.e. something that would be matched by the -type f predicate to find. To me, the wording of this question strongly suggested the latter meaning. –  David Z Sep 27 '10 at 4:15

1 Answer 1

up vote 3 down vote accepted
find ... '!' -type d ...
share|improve this answer
    
Thanks, I didn't realize find had operators. Are the single quotes necessary as I managed to get it to work without them? –  wting Sep 26 '10 at 8:31
1  
It depends on your shell and its options. bash uses ! in history expansion, so quoting it in the CLI is a good idea. You probably won't need it in a script though. –  Ignacio Vazquez-Abrams Sep 26 '10 at 9:08
    
History expansion is not active in scripts, correct. –  Daenyth Sep 26 '10 at 13:28

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.