Recursively change permissions on files, leave directories alone.

find ./ -type f -exec chmod 644 {} \;

34
2009-04-22 21:14:36

2 Alternatives + Submit Alt

What Others Think

Bad performance. Try it yourself. First: Create some files for n in `seq 1 1 1000`; do touch $n; done Bad: time find ./ -type f -exec chmod 644 {} \; real 0m2.726s user 0m1.050s sys 0m1.673s Better: time find ./ -type f -print0 | xargs -0 chmod 644 real 0m0.061s user 0m0.014s sys 0m0.040s
OJM · 625 weeks and 6 days ago
If your version of "find" supports it, then there is no need to pipe to xargs... find ./ -type f -exec chmod 644 {} +
Resolution · 625 weeks and 6 days ago
Yeah, seconded what Resolution said. -exec cmd {} + should be used in lieu of the -exec cmd {} \; option whenever possible, as it provides the xargs behavior without the additional pipe and process of using xargs, and without the per-argument command invocation overhead of -exec cmd {} \; .
bwoodacre · 625 weeks and 6 days ago
another thing: you'd think that this would be an option when using chmod -R since it's a simple operation to distinguish files and directories.
bwoodacre · 625 weeks and 6 days ago
Only thing is when using the xargs trick is command length. If there are too many files, one has to resort to a stright up exec like the original command has.
hank · 625 weeks and 4 days ago
If it is speed you want: Create files: for n in `seq 1 1 1000`; do touch $n; done time find ./ -type f | awk '{printf("chmod 644 %s\n", $1)}' | sh 0.00user 0.00system 0:00.01elapsed 70%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+318minor)pagefaults 0swaps
mpb · 625 weeks and 2 days ago
`xargs` is the proper UNIX way. Think Parallel. http://en.wikipedia.org/wiki/Unix_philosophy
asmoore82 · 618 weeks and 5 days ago
Since this is usually used to remove the x from files, one can also use: chmod -R a-x,a+X ./ This removes the x bit from all files and puts it back on folders ;)
assarbad · 478 weeks ago
This is one of the many reasons I switched to zsh. You can do the same thing with: chmod 644 **/*(.) To change directory perms: chmod 755 **/*(/)
Vilemirth · 444 weeks and 2 days ago

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands



Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: