Hide

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. 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.


Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Universal configuration monitoring and system of record for IT.
Hide

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:

Hide

News

May 19, 2015 - A Look At The New Commandlinefu
I've put together a short writeup on what kind of newness you can expect from the next iteration of clfu. Check it out here.
March 2, 2015 - New Management
I'm Jon, I'll be maintaining and improving clfu. Thanks to David for building such a great resource!
Hide

Top Tags

Hide

Functions

Psst. Open beta.

Wow, didn't really expect you to read this far down. The latest iteration of the site is in open beta. It's a gentle open beta-- not in prime-time just yet. It's being hosted over at UpGuard (link) and you are more than welcome to give it a shot. Couple things:

  • » The open beta is running a copy of the database that will not carry over to the final version. Don't post anything you don't mind losing.
  • » If you wish to use your user account, you will probably need to reset your password.
Your feedback is appreciated via the form on the beta page. Thanks! -Jon & CLFU Team

Recursively change permissions on files, leave directories alone.

Terminal - Recursively change permissions on files, leave directories alone.
find ./ -type f -exec chmod 644 {} \;
2009-04-22 21:14:36
User: ethanmiller
Functions: chmod find
33
Recursively change permissions on files, leave directories alone.

Alternatives

There are 4 alternatives - vote for the best!

Terminal - Alternatives
find ./ -type f -exec chmod 644 {} +
find /var/www/ -type f -print0 | xargs -0 chmod 644
2013-03-28 11:10:30
User: FiloSottile
Functions: chmod find xargs
Tags: find xargs chmod
-1

xargs is a more elegant approach to executing a command on find results then -exec as -exec is meant as a filtering flag.

Know a better way?

If you can do better, submit your command here.

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

Comment by OJM 383 weeks and 1 day ago

If your version of "find" supports it, then there is no need to pipe to xargs...

find ./ -type f -exec chmod 644 {} +
Comment by Resolution 383 weeks and 1 day 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 {} \; .

Comment by bwoodacre 383 weeks and 1 day 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.

Comment by bwoodacre 383 weeks and 1 day 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.

Comment by hank 382 weeks and 6 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

Comment by mpb 382 weeks and 4 days ago

`xargs` is the proper UNIX way.

Think Parallel. http://en.wikipedia.org/wiki/Unix_philosophy

Comment by asmoore82 376 weeks and 1 day 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 ;)

Comment by assarbad 235 weeks and 3 days 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 **/*(/)
Comment by Vilemirth 201 weeks and 5 days ago

Your point of view

You must be signed in to comment.